
#include <gmlib/number/bn.h>

#include <cstring>
#include <stdexcept>

using namespace number;
using namespace std;

void test_bn()
{
    BigNum a1 = BigNum::from_uint32(0);
    BigNum a2 = BigNum::from_uint32(0);
    BigNum b1 = BigNum::from_uint32(0);
    BigNum b2 = BigNum::from_uint32(0);
    
    a1 = BigNum::from_str("-8989650116680564675312627597875283965052487708565573567655948180540033678838817314604052172911401620435450955397808817581274405073170310935148153165715061");
    a2 = BigNum::from_str("-12368387650429864015427549952648135870564115966868971628056450703063194415120290091171811319403255533851252290792629701231208055452055238974659423552500755");
    if((a1 + a2).to_str() != "-21358037767110428690740177550523419835616603675434545195712398883603228093959107405775863492314657154286703246190438518812482460525225549909807576718215816")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-6497431240312641859925804383404353909363323938324745941611555454560084226073730733797131501482796724869363444662569785588765936826918063138654971993986010");
    a2 = BigNum::from_str("-4574361240012487424920983491033166301073619381526757338304086781512255271787822656226493374969312876212593192210766782380916782462121124813549765651981608");
    if((a1 + a2).to_str() != "-11071792480325129284846787874437520210436943319851503279915642236072339497861553390023624876452109601081956636873336567969682719289039187952204737645967618")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("4422468136270852878542921903646394377262172269207923607069236293579409748205162922487398406266361683114353969534170433423690219944601253276166274866168323");
    a2 = BigNum::from_str("3473808102302237386391979924390904576903013028796384515524885098316243209517774957352568576892742363366742338817190072025671846511976253800840844761735277");
    if((a1 + a2).to_str() != "7896276238573090264934901828037298954165185298004308122594121391895652957722937879839966983159104046481096308351360505449362066456577507077007119627903600")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-3535786791421631953692995430993454682483311075309477277297601496403825669343330683570937189017513295170919663415378046669651645908156677953042513653151245");
    a2 = BigNum::from_str("-11834040954690114180515097119524857785692343076016137479219845737918763498095956654257941813446183103706024009189277123546087959592577935549764041961229238");
    if((a1 + a2).to_str() != "-15369827746111746134208092550518312468175654151325614756517447234322589167439287337828879002463696398876943672604655170215739605500734613502806555614380483")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("9351880526554794180776541872167845284474682149759570450850419830297390399747761241833362293859097869750536113459815390892753576418895674068808558279252074");
    a2 = BigNum::from_str("5121239607107235943260892667993731795534790416605816725752414652734240260936328272254001198296314386806255058767899363363326359537365673083832676471598294");
    if((a1 + a2).to_str() != "14473120133662030124037434540161577080009472566365387176602834483031630660684089514087363492155412256556791172227714754256079935956261347152641234750850368")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-8107564810826208390008915963479116093603121710074274157924092126728570691038621243650931034378496578773432719348394090139465892109894030449896662303230231");
    a2 = BigNum::from_str("2660056431679572337741499989768700998053458147532870262512814295127409464785443220035090781542031399555923070618409891576268740198230023461539964818743833");
    if((a1 + a2).to_str() != "-5447508379146636052267415973710415095549663562541403895411277831601161226253178023615840252836465179217509648729984198563197151911664006988356697484486398")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("5370108770125956811732499588552951882643900628700320748105573607914813945302941539487657537296486623470536513724670852114949472166189262074093975794976794");
    a2 = BigNum::from_str("2513340074960271446514068020963491783543236920198730633295721756126425593678888389652709476918980248408215746638070096409585490799438083603442496116358493");
    if((a1 + a2).to_str() != "7883448845086228258246567609516443666187137548899051381401295364041239538981829929140367014215466871878752260362740948524534962965627345677536471911335287")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-5646467097334239423284416334646544689109268143137810981404240765985688815977777001499676498575420234805076657175095213465426357222578367685558603821641818");
    a2 = BigNum::from_str("-543095807082990810786831911440980007089707684267866493308239077612824584800374556901752159158319254431090606770522152869903419760147599024982379641177814");
    if((a1 + a2).to_str() != "-6189562904417230234071248246087524696198975827405677474712479843598513400778151558401428657733739489236167263945617366335329776982725966710540983462819632")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-97037306367160648353088495616367187376688163918690549317054376428640572375597741414237910981010764996401476213411085369856450704212663360897580219232956");
    a2 = BigNum::from_str("-7210592564492942249879082935812550521512582779079903614887716836500559453583744368571306780111640833795573002360887294737250569427932325425256799302567224");
    if((a1 + a2).to_str() != "-7307629870860102898232171431428917708889270942998594164204771212929200025959342109985544691092651598791974478574298380107107020132144988786154379521800180")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-9405236685317906832199099034034688873087252639949658205886840709977832344858574211743151141471663018475938881794867609407542055762082306660868263145175759");
    a2 = BigNum::from_str("7714812187917232589156517893693406042561014709835033703062612720311696681271659516987504178317011609311586751262363759991540119559270607341799026421149505");
    if((a1 + a2).to_str() != "-1690424497400674243042581140341282830526237930114624502824227989666135663586914694755646963154651409164352130532503849416001936202811699319069236724026254")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-5930571459376455700461508388201697505430233956451078001944439147610852905316075400937189704057325930500709219066658783143680036112880173985524841113345475");
    a2 = BigNum::from_str("3677465974048654119645389744668144730229008886195846550151249196344046437395723098607535008927574867916653649912407810758623031991351496179861499265805314");
    if((a1 + a2).to_str() != "-2253105485327801580816118643533552775201225070255231451793189951266806467920352302329654695129751062584055569154250972385057004121528677805663341847540161")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-7973428490975735368592825970291850066425249881892522460841733477433144006207560306792403708634142515502831934119569184436531999178741013111859428442331064");
    a2 = BigNum::from_str("679814604080022846185718203384947782097118809255095960028251165202507384829368237491338721096477626082142514841181179289973957671249249283445595215229780");
    if((a1 + a2).to_str() != "-7293613886895712522407107766906902284328131072637426500813482312230636621378192069301064987537664889420689419278388005146558041507491763828413833227101284")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-7098008159124824156884524693771623913245636937442434772684457640198994999094796256841045958126793374915865321741392659764217315453256667235457415368750234");
    a2 = BigNum::from_str("-2796843330156476702421790374881224063721360044207040672056696802001746268269372542277864627227526367647332374357969486401468546073733390726129526790662434");
    if((a1 + a2).to_str() != "-9894851489281300859306315068652847976966996981649475444741154442200741267364168799118910585354319742563197696099362146165685861526990057961586942159412668")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-317255497961638018042134664081540575284282430219501525295089657907125504265583520717332134715173086797802712450004617798610682325300542188805477270677104");
    a2 = BigNum::from_str("-9218190327080906496505704608779269161443947523361149694669230335857538357582742568448341173038709991201813020822247158427709025326164504323837080898300481");
    if((a1 + a2).to_str() != "-9535445825042544514547839272860809736728229953580651219964319993764663861848326089165673307753883077999615733272251776226319707651465046512642558168977585")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-65576552916065744385828895867857337820798148020297298195337727467731239792419864452626558920801230068889758497095591062044031332997443307774184466612133");
    a2 = BigNum::from_str("11547174863901491443951588972296377003039725563694661504963779930450460438089371342900133748999738865600109058794148336176793966654569785944845546774650819");
    if((a1 + a2).to_str() != "11481598310985425699565760076428519665218927415674364206768442202982729198296951478447507190078937635531219300297052745114749935321572342637071362308038686")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("3484905306236134464505842202238078701280724274505895556591538672293488457244654740433367632355861465745751350976564653631298446472226097513721553674631900");
    a2 = BigNum::from_str("9630057102916757995017770893586410563324728941138577061343547570239025914477404795859403884759264358964878564920657980870282029841259702254272925823146565");
    if((a1 + a2).to_str() != "13114962409152892459523613095824489264605453215644472617935086242532514371722059536292771517115125824710629915897222634501580476313485799767994479497778465")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("1350494071605151733550578570716217749281445087391256560581915192539408412720604739962883779234097367949598322053138884151939404750036627830659499684153182");
    a2 = BigNum::from_str("9843835066415327416235048593336654644619109233000771321746329315883512490397854686749642073037432663579500456812890705730644889539897173028845538394370892");
    if((a1 + a2).to_str() != "11194329138020479149785627164052872393900554320392027882328244508422920903118459426712525852271530031529098778866029589882584294289933800859505038078524074")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-4917121408370441510472629432294511462455049292113104246990559571114476425783625539712040668705613934116650568718213845976329164334967942465664897369836167");
    a2 = BigNum::from_str("8484160284196006935689260263571255706564960699847018965753446882819103757228450455803972792054385274730207570256123003350051309767547830122706938308606693");
    if((a1 + a2).to_str() != "3567038875825565425216630831276744244109911407733914718762887311704627331444824916091932123348771340613557001537909157373722145432579887657042040938770526")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-12888810428619846135897005214802997513100825032488273003107450024465545004791477250468501032491561860959308243791836690711157753183942694219882615965624274");
    a2 = BigNum::from_str("-2786602395880043421640306815117318187371362299966412709863047868430086891909292518393705914193871272350552704848553771987976037026494035462254918724070263");
    if((a1 + a2).to_str() != "-15675412824499889557537312029920315700472187332454685712970497892895631896700769768862206946685433133309860948640390462699133790210436729682137534689694537")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-8826873845854613732727847626794792000823587369703144111987929006465585755028034267667507731367222040478030477987381233559940773794197550347970070736707658");
    a2 = BigNum::from_str("-11506279861214228893057437153445979098334142567512897731465206761597714580015625705747698791261150246513811918326279847219253116221981809562593607227948346");
    if((a1 + a2).to_str() != "-20333153707068842625785284780240771099157729937216041843453135768063300335043659973415206522628372286991842396313661080779193890016179359910563677964656004")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-11324790465757265219698272721511250480647921077966859055911385464868845787268106574320170071425497456391793650724173272576854545887833834437052523167870793");
    a2 = BigNum::from_str("12845188080705283856749010621992045312308742723397613581922330890873130368136881523614040101113201114579699341889309807125108192841925860909875870655545814");
    if((a1 + a2).to_str() != "1520397614948018637050737900480794831660821645430754526010945426004284580868774949293870029687703658187905691165136534548253646954092026472823347487675021")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-1235853675999238590727556467188799950076347852847297685606061623661330705466100376856009405362377180004869615193722428481531653548023348775613394411804817");
    a2 = BigNum::from_str("-9878349329464813435899785783819922890024410854438866650394034823049839010807198150504974104218054714318256448501060255618842101094592099441773705994421970");
    if((a1 + a2).to_str() != "-11114203005464052026627342251008722840100758707286164336000096446711169716273298527360983509580431894323126063694782684100373754642615448217387100406226787")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-212532406260670066369507576730871010353763918639554476953997122693716242293492695006560176576434848187480136157541969078006423757507603583138280481575536");
    a2 = BigNum::from_str("13273634352420931120766154229626168483622077395491557031354877485368517573595434278991134622553378500287303950772201720932379864075689194226921633026084224");
    if((a1 + a2).to_str() != "13061101946160261054396646652895297473268313476852002554400880362674801331301941583984574445976943652099823814614659751854373440318181590643783352544508688")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-3862822187366850878230124008838573737446128460535156690540826849597299447162593604878165600998114432190312941346505389148913928271900556421655079167055418");
    a2 = BigNum::from_str("-2483406976162577861019950007941524228023288961703893438245562482041287533648429393165397861793942704045473606863078485439723981805474348611802492939294418");
    if((a1 + a2).to_str() != "-6346229163529428739250074016780097965469417422239050128786389331638586980811022998043563462792057136235786548209583874588637910077374905033457572106349836")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("2130531029746977412123437409779808396974855900982807418188445057825316013192317644671133759773755186561498031489923842577940976569883891923085398501319146");
    a2 = BigNum::from_str("4794832966249118027323619040123582939029378136776333722520815473111210284985655225438325284901456868358982693641571173032647353744105845050160235592598674");
    if((a1 + a2).to_str() != "6925363995996095439447056449903391336004234037759141140709260530936526298177972870109459044675212054920480725131495015610588330313989736973245634093917820")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-3141512817254763872610113190735166420386812524722055306334967034256682484454684053671158445407657893401931014314532839936110508462504435714099065358766326");
    a2 = BigNum::from_str("7150008458910923384681911539463806095079892136383858071077827856373363417486013787094074659766819648351215370430002579107759383702200787233535292456363878");
    if((a1 + a2).to_str() != "4008495641656159512071798348728639674693079611661802764742860822116680933031329733422916214359161754949284356115469739171648875239696351519436227097597552")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-4861370159218304451093294791819412847967412507135586980207813372442888845114912695038256335234856499894972822949408097847008974358980872629095322556215043");
    a2 = BigNum::from_str("-5503349744734717121043326585040975170865158455409114343407311056868889355446518175336023490583956669592729437170916628435689313147774953295701391402427292");
    if((a1 + a2).to_str() != "-10364719903953021572136621376860388018832570962544701323615124429311778200561430870374279825818813169487702260120324726282698287506755825924796713958642335")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("8613803216529018932086985420411927619226548303883871892110480479666928392442168386071914589315587860064113552415871777014444838640051086430046793819723240");
    a2 = BigNum::from_str("-625400218947485421488649194227321007158130447486484926471651211784637911604270394621705764234887198859973342616537830386816917612688036007292964641830469");
    if((a1 + a2).to_str() != "7988402997581533510598336226184606612068417856397386965638829267882290480837897991450208825080700661204140209799333946627627921027363050422753829177892771")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-805619315225292632209540912234387155900438627719545576037048414202337299023284921748791114208214543214655566484451721912500223145114198460739184965158125");
    a2 = BigNum::from_str("2574615306931738313394774791621594075599445812756319971525453938613059895446406287855141320926783488477501622550126677616218297989666465277648964909400930");
    if((a1 + a2).to_str() != "1768995991706445681185233879387206919699007185036774395488405524410722596423121366106350206718568945262846056065674955703718074844552266816909779944242805")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-19705846484314622594230711601729956578406292687424822536545133265016356541771370378332627695579959582066545796560188276931118344067020990622281939612851");
    a2 = BigNum::from_str("-5870260420505518922054976638137235549665854518168490028715494437902818793963046720175311599055434266524388146311888290221430780947244716747767741757327361");
    if((a1 + a2).to_str() != "-5889966266989833544649207349738965506244260810855914851252039571167835150504818090553644226751014226106454692108448478498361899291311737738390023696940212")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-3952093328484132331214842742722753689621240365016418773059689455249022804388242073286487209956341912463575258746954696288419543089365328103407333400920326");
    a2 = BigNum::from_str("7087481722313476984587465385920079348456278952848556181612929160337076049809981775461194949303412066890676052512984510213023751592293656173248136723646849");
    if((a1 + a2).to_str() != "3135388393829344653372622643197325658835038587832137408553239705088053245421739702174707739347070154427100793766029813924604208502928328069840803322726523")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-2900202135609873853912762309161203598362489081721908045417567721042996422125654134274657869359517657507859316825990569706612031931103018391192962308516563");
    a2 = BigNum::from_str("11219510412100545974957222645928848359543948108463408928973478472354407927499659973426668343175852038516226066057834676224037634149593935924970769450207032");
    if((a1 + a2).to_str() != "8319308276490672121044460336767644761181459026741500883555910751311411505374005839152010473816334381008366749231844106517425602218490917533777807141690469")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-4104850598590253820137752132424605463423183883257072023095926347294781081802106880900395697766380321150648972781812018608514906184030442572898041623162695");
    a2 = BigNum::from_str("-10770509698921417805549127284761718514354831206455316574903076898204195336380694981005630787299723122123489690863444092493798789901430910917670161994793918");
    if((a1 + a2).to_str() != "-14875360297511671625686879417186323977778015089712388597999003245498976418182801861906026485066103443274138663645256111102313696085461353490568203617956613")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("9655327740611963947484409364190263868502930366496761573884021553214660242126028929810615143099726707895505158058307735582052752544104039604458953368603992");
    a2 = BigNum::from_str("10637835858640298170305893490693706416002880531907320983864654185503592283154075627290627374638077081198254823851658932595470700601552438343397840764517421");
    if((a1 + a2).to_str() != "20293163599252262117790302854883970284505810898404082557748675738718252525280104557101242517737803789093759981909966668177523453145656477947856794133121413")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-3572339215030202625698127002153985378018653108371882280422671564832098970476516676208772718762688277711677843177252612796551340566561300212028082299766460");
    a2 = BigNum::from_str("-1485535615299758335809603222284820233941124254349584956462583056932264523547076194405882973337477026885082770820724229452386643849924489940718168183514057");
    if((a1 + a2).to_str() != "-5057874830329960961507730224438805611959777362721467236885254621764363494023592870614655692100165304596760613997976842248937984416485790152746250483280517")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("7512031900282457973891657582560644178696498718617248443295029605098350603712623826983844239611747795963860594441575881554826797344005818889934803887484233");
    a2 = BigNum::from_str("-9824556166569289590285178817948304791130890405794583217327858399469343197789662575868477299389963587230299323664863945945817263196731130124447090889396778");
    if((a1 + a2).to_str() != "-2312524266286831616393521235387660612434391687177334774032828794370992594077038748884633059778215791266438729223288064390990465852725311234512287001912545")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("252057179181255102113186661818111504068528808888209294263262515145977330394476623974037299793224349150673047431580179542736598617907653909957895219357010");
    a2 = BigNum::from_str("7861748617152346947601998329101749858017377101469588402249720781221402104045462869742915682197724259948837792892202883743478943338218801305598741216009966");
    if((a1 + a2).to_str() != "8113805796333602049715184990919861362085905910357797696512983296367379434439939493716952981990948609099510840323783063286215541956126455215556636435366976")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("1496696238314468032458890201607882486598256515073444887805955593501812889679759436132043222408717214104186721035688004689072549517963835109293576940483545");
    a2 = BigNum::from_str("8115989946095379828884707473960012316018718163663652892502899725233796727806342830741674073210577471010256861670953165387968480935984964512054398866076192");
    if((a1 + a2).to_str() != "9612686184409847861343597675567894802616974678737097780308855318735609617486102266873717295619294685114443582706641170077041030453948799621347975806559737")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-10523701585931114310194405422611650615927902222356505450385369411019509107146137991106375039325306417780484806420779667910267590773424422105150377558151284");
    a2 = BigNum::from_str("11572436589747542344808754271195428379737367576383569696308481548862152474146161466442580915176805706114516462355834400160036588696225724262076924318634459");
    if((a1 + a2).to_str() != "1048735003816428034614348848583777763809465354027064245923112137842643367000023475336205875851499288334031655935054732249768997922801302156926546760483175")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-7268873955082550807302262275237025183006839472949852103556890407626318992384843610967317043828563116952398041671772977977175184928719800678502083353495704");
    a2 = BigNum::from_str("2540131478375083889235879369914175517026837236431291474274574875527438353048248703789908529114293196465364778890377968412555953362253858802813415132340182");
    if((a1 + a2).to_str() != "-4728742476707466918066382905322849665980002236518560629282315532098880639336594907177408514714269920487033262781395009564619231566465941875688668221155522")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-10098104164258213809387884263937396834344679569309943706461918250425383910529069264451641915541649602128250593397100869606005050336588047704072663508630161");
    a2 = BigNum::from_str("8064479854736674213302263531976565392705640404791561816520141846145047648153237676409578930188224906116733383022954261814911735949746325698307266649996084");
    if((a1 + a2).to_str() != "-2033624309521539596085620731960831441639039164518381889941776404280336262375831588042062985353424696011517210374146607791093314386841722005765396858634077")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("5610712225126105834247349970764190608322804717985463039932609240343162869537576355918630542948119033693238133837682989392619316886825508430012734744486981");
    a2 = BigNum::from_str("2783817892074799266731176606727968545827886591550803309092291863630043312131957885392834631248903987836414699522985240398145738744658552931325321413892794");
    if((a1 + a2).to_str() != "8394530117200905100978526577492159154150691309536266349024901103973206181669534241311465174197023021529652833360668229790765055631484061361338056158379775")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("11900116047475366664450870545147439663722565602818338811225148870582303344787554121180032806888686475095504357197182035590020914369634629594201148509709491");
    a2 = BigNum::from_str("2008113803167293965280722408407489233974352959657969023117349898029693817870089103333657838440499692572640197398342447942075182838526553756208490045602275");
    if((a1 + a2).to_str() != "13908229850642660629731592953554928897696918562476307834342498768611997162657643224513690645329186167668144554595524483532096097208161183350409638555311766")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-10071764844953073004368342674414976347060667252863977154459872995452130803848962739705759795472547221780939774702102589632356764878530358896224365104721417");
    a2 = BigNum::from_str("12185045394362393475274268680336996549276802602747553261938307437719768334812211894933610013287486656548758875240715261706377119592995916820936767328493504");
    if((a1 + a2).to_str() != "2113280549409320470905926005922020202216135349883576107478434442267637530963249155227850217814939434767819100538612672074020354714465557924712402223772087")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("1919166823654095708047777773903398766663246667829370243061890142043822161690875574880185411485127452053433996585939584958605181096161852984820831416847306");
    a2 = BigNum::from_str("-8308654471325474963480608406873568374292578745847254033907679346946873291452539027328909983157645172653537277477809714482374884884887086496953690630796616");
    if((a1 + a2).to_str() != "-6389487647671379255432830632970169607629332078017883790845789204903051129761663452448724571672517720600103280891870129523769703788725233512132859213949310")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-12628990799796920868785636412677854536488676763915283817521107499880647165714206294434603357914855558950121470796979017247043378712888667668534308380683137");
    a2 = BigNum::from_str("10246562046242202866044672869229990331271069994406748375325210717568070208370869055523511804271540865075160205672313560119749612393631920095383014208091180");
    if((a1 + a2).to_str() != "-2382428753554718002740963543447864205217606769508535442195896782312576957343337238911091553643314693874961265124665457127293766319256747573151294172591957")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("1779014533391758742203592740443994363296413048797165129573142537066661895473964977416366034666616091675890719673025505889130722664845844173313907419537539");
    a2 = BigNum::from_str("-9812607921879236291049964261557501818166870783028714570732853811320498186958023520461809830438363294802693643940643634920470546108198526146846524436639635");
    if((a1 + a2).to_str() != "-8033593388487477548846371521113507454870457734231549441159711274253836291484058543045443795771747203126802924267618129031339823443352681973532617017102096")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("7723910459303961128975191167793749615849886297720846328446524168311654695475950557502326986612915305060475199600456673484304662635448626378697213504137304");
    a2 = BigNum::from_str("11100087221191232379610654689045999251965337357530813000017295998912280827862196801732580872998258639098579390018628463672183418326428658077276607384125275");
    if((a1 + a2).to_str() != "18823997680495193508585845856839748867815223655251659328463820167223935523338147359234907859611173944159054589619085137156488080961877284455973820888262579")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("4655714824357975090679389975313401785083399010337515642999735399488884899967269798141091530213706479016252196912737186729413110655066814623627690719620574");
    a2 = BigNum::from_str("-12955997988994769796400522171673198753636878262643594744911749298928654513019899211847718951332324994614569199583964736647036396859933047044521658737945307");
    if((a1 + a2).to_str() != "-8300283164636794705721132196359796968553479252306079101912013899439769613052629413706627421118618515598317002671227549917623286204866232420893968018324733")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("315136954223275324095694478118546139057330375445443713627093257324864510471791352630297239285812395500998802132311390907765417401765973652598606798341756");
    a2 = BigNum::from_str("5164198828645328394800602316151693299575069340588525331066757905943124338712682355500547861667002999973130161093440948025036861454812373265728159791835951");
    if((a1 + a2).to_str() != "5479335782868603718896296794270239438632399716033969044693851163267988849184473708130845100952815395474128963225752338932802278856578346918326766590177707")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("11707638864355095033168176354379204919790140515132586307959249707265619535902711029515669651535994133669037801928892740517496611396204307869716056659859200");
    a2 = BigNum::from_str("13248787252595235770320655033003083578211999920073188023520384577443433185742735030938014733607932906197364065974433460429927077808660131968985457367358911");
    if((a1 + a2).to_str() != "24956426116950330803488831387382288498002140435205774331479634284709052721645446060453684385143927039866401867903326200947423689204864439838701514027218111")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-5097390377463503435568209281076774714309625343536410713813959614262484480565494394099713930486272987649581433533864518152335676224734644003765199084996873");
    a2 = BigNum::from_str("3163022289985882969211271636861044311286105844971605939106083235468941545024871245865529516632690312184203588670647189123037419674221786099769206066251382");
    if((a1 + a2).to_str() != "-1934368087477620466356937644215730403023519498564804774707876378793542935540623148234184413853582675465377844863217329029298256550512857903995993018745491")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("1207154733128488313923539171233728584305319851615828930037739983596152530128447738672050381948502398471141634675818649911730389154644025807549781320409283");
    a2 = BigNum::from_str("-3782970640043554873582192447730567982750297825036613191988519381919267885731106383954059710292651712428461862737675150206630027617203261742652504898164164");
    if((a1 + a2).to_str() != "-2575815906915066559658653276496839398444977973420784261950779398323115355602658645282009328344149313957320228061856500294899638462559235935102723577754881")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("719245509344731913059626886379413275520866882657472446939083089171744083953897999504314123888431015402185738487541272520137645683889651311638685752672075");
    a2 = BigNum::from_str("8072724224972196581510594492803871250747365560993638014160503348402130430173990652189808682391821969297667704208677633027079746198192783378711165729292748");
    if((a1 + a2).to_str() != "8791969734316928494570221379183284526268232443651110461099586437573874514127888651694122806280252984699853442696218905547217391882082434690349851481964823")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-12090938227824632662560880513138983270023324403912627498828921309425197020412354738157969746548131811833804433734137346575496515594049278591649298745407720");
    a2 = BigNum::from_str("-1355467875958281484897668788428619818297524512504220353434490175844871725277452695710959352348589406864013540721229306709212264813659457290913829428777166");
    if((a1 + a2).to_str() != "-13446406103782914147458549301567603088320848916416847852263411485270068745689807433868929098896721218697817974455366653284708780407708735882563128174184886")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-2166087939109414954100209467405498271860940215454692510936727285870980974174868058461363605398187302078894148288430147943954841864324152717981404075145660");
    a2 = BigNum::from_str("-11620781412909872648472966202121540142027171403116132471638447467546404324248100875802180956036779415596853841988602819259230286190689014674797357865890050");
    if((a1 + a2).to_str() != "-13786869352019287602573175669527038413888111618570824982575174753417385298422968934263544561434966717675747990277032967203185128055013167392778761941035710")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-2888785564680513840563987404661062633122690513836927784338748224120358941642923104895983406348600656529292189967697674497146741960760003667286135825706321");
    a2 = BigNum::from_str("5171736376461600368167367528692406947644845646717609447086680376180467625550411456977676265287783265331316154404700531102824992308106353600678858340308810");
    if((a1 + a2).to_str() != "2282950811781086527603380124031344314522155132880681662747932152060108683907488352081692858939182608802023964437002856605678250347346349933392722514602489")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-4366912201392635069705103249554258661655356340776511642781103423294999536301527487778414367307399420049492359045877296412775899639714146423645318850687356");
    a2 = BigNum::from_str("-4859066327742744089073870446206690060270948939695017990856366373109795799660204529416552809440352995488450148520890054512381578939489981458379506083318720");
    if((a1 + a2).to_str() != "-9225978529135379158778973695760948721926305280471529633637469796404795335961732017194967176747752415537942507566767350925157478579204127882024824934006076")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-1222897852572228129780196236025654679360924127969881794358642211722666036536953717893685493764469356514888829827648151066057606339090759884342883928223872");
    a2 = BigNum::from_str("-5845783288606700309277261585277361105158101960615479759372035593855622949596768722154977564984574283332892333551890350047171688711948793622941803879330222");
    if((a1 + a2).to_str() != "-7068681141178928439057457821303015784519026088585361553730677805578288986133722440048663058749043639847781163379538501113229295051039553507284687807554094")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-7333061876242911677016254337987880610565946776907424955021480733081419056209778845563152871751433800122211860159076101685096531588959305901458931753488709");
    a2 = BigNum::from_str("12151888501545668201773719255940918129207282001516923778198814572550829909632147078706992521381711117805010592031463251259121905842650744160229076239647287");
    if((a1 + a2).to_str() != "4818826625302756524757464917953037518641335224609498823177333839469410853422368233143839649630277317682798731872387149574025374253691438258770144486158578")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("7362170369980007307691929975727759440617576046941833560079456211813786785801269426847834268685355663044481766624211304841268086427814128351216461871807737");
    a2 = BigNum::from_str("-6140880060492123369374607923268696724362157654974773681032640131323836652321975907476133574794709845789174089611919713096209294007509316363070755101755814");
    if((a1 + a2).to_str() != "1221290309487883938317322052459062716255418391967059879046816080489950133479293519371700693890645817255307677012291591745058792420304811988145706770051923")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("110561289132320129812275165707979175900315391729314456934476145387990783063692155806934042925240583404154684847610775223219059613223813764568159323289906");
    a2 = BigNum::from_str("10771932266422507737034870665681012759959613959987424993523997779306193512647591221957962335763516112295910853313828479498999153976360623883625725022557474");
    if((a1 + a2).to_str() != "10882493555554827866847145831388991935859929351716739450458473924694184295711283377764896378688756695700065538161439254722218213589584437648193884345847380")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-740188939958582070926778563712673453138220327034866113004358544052348472716099524765532216194617372873766279455589769454499195090981033761033723567714056");
    a2 = BigNum::from_str("-10757193114142253799507425149499168509642311610303704310232309918489615546531188322013727354217495690064865543367197640677494674663368571972782682932231426");
    if((a1 + a2).to_str() != "-11497382054100835870434203713211841962780531937338570423236668462541964019247287846779259570412113062938631822822787410131993869754349605733816406499945482")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-3170832508746136159835408609674850648990591584585307455909041809667512591174890231113187948015104075700400937282525387264895014285009621151407844932428929");
    a2 = BigNum::from_str("-8883941707408752482177810329548943483498563032216235145532225887525056694517719850915828128149245399832237422165842947037716358021250654164190455814174310");
    if((a1 + a2).to_str() != "-12054774216154888642013218939223794132489154616801542601441267697192569285692610082029016076164349475532638359448368334302611372306260275315598300746603239")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("5118662030027641522476145977423419572550258956606430321189566538232285796007574098189553614408414648206950407546213123019854913737365564096355214699370891");
    a2 = BigNum::from_str("-2981298926825176642513741615357188974289897434542796263077805484988423111674498809307755176553028732789707398401269850933529724895759381163607621313765221");
    if((a1 + a2).to_str() != "2137363103202464879962404362066230598260361522063634058111761053243862684333075288881798437855385915417243009144943272086325188841606182932747593385605670")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("4904595152459869820980866098967941773347336667710801799995369025467759478246389266193407018615549753704604795283273527098012259004495023427768137773318303");
    a2 = BigNum::from_str("-641189444488561995786035623570893073562959370583210640523542358514468985097920968404141687749612017386727055835440955030658406623991706273404259573535555");
    if((a1 + a2).to_str() != "4263405707971307825194830475397048699784377297127591159471826666953290493148468297789265330865937736317877739447832572067353852380503317154363878199782748")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-3809302925296600617899476889612343654749868927436339898743709946734839680386705565550467132695879684396821122546389731089568692831741419053901079063563288");
    a2 = BigNum::from_str("-9201835031696865603034237157384161042931041507563864430483866663187021984613440565182109338827120560806121387712448978345217773964011862630694814140336751");
    if((a1 + a2).to_str() != "-13011137956993466220933714046996504697680910435000204329227576609921861665000146130732576471523000245202942510258838709434786466795753281684595893203900039")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-11748666075079380516729482669685953716304997802632810116543135254962937998692933879244361745806560382169175801235859519855993645791591620658298113590301731");
    a2 = BigNum::from_str("148834326959528455840857476575712743366420694645193651181356631088005143401916677817091258938133870557537381423044340307592700130798606527341850082542175");
    if((a1 + a2).to_str() != "-11599831748119852060888625193110240972938577107987616465361778623874932855291017201427270486868426511611638419812815179548400945660793014130956263507759556")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("1416198996225871355391953070108320187682329900918828271534531282313797102441023350406354509428681933424138282173214729354561048831311596430635771128983676");
    a2 = BigNum::from_str("10998306206323715581634259423452154364002197260744607717553760630166443545790453319452589477773235391995954127899781994701063606195408942512828038082571346");
    if((a1 + a2).to_str() != "12414505202549586937026212493560474551684527161663435989088291912480240648231476669858943987201917325420092410072996724055624655026720538943463809211555022")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("10327593407310990493168795762195964282028000039389112905931526239979488242230919418163326812612702384849827320155885609608036581287544507395153376178103181");
    a2 = BigNum::from_str("-5358897872467627715557068732561468427347581933883676517946026821136600298328040731852697166350504376679673889960316541772644099559644021028744852333637783");
    if((a1 + a2).to_str() != "4968695534843362777611727029634495854680418105505436387985499418842887943902878686310629646262198008170153430195569067835392481727900486366408523844465398")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("9539597749797233973598309750313768955031633554193862355587339023965683327241250292192791425072022444328193542948645159904042654367207577831934617641046839");
    a2 = BigNum::from_str("5995193288342819329237560845595092970314645141400717525372096918949501038755310220241367579545556247597069085332419901607360568929277927582818978586780799");
    if((a1 + a2).to_str() != "15534791038140053302835870595908861925346278695594579880959435942915184365996560512434159004617578691925262628281065061511403223296485505414753596227827638")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-3165108789913843307479552484818637903093873514011608850343084548783252720041449453227059747610566626610702104842549435193373416840713204560931741855971108");
    a2 = BigNum::from_str("6729884311423788595996717378250355935985889453694039990959975002832185143325563415898599574896743710558514459754162746122987304948752243260178646017764669");
    if((a1 + a2).to_str() != "3564775521509945288517164893431718032892015939682431140616890454048932423284113962671539827286177083947812354911613310929613888108039038699246904161793561")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-10208021542836149614032218932417526918812703698849333451866076601799192124698186191901487778597494789609703070396295205132829171967046396716775882851484779");
    a2 = BigNum::from_str("-8894215109442064565534968049700332775129835102126597187403265491708764749286024721533249486785006611615686997333538603538717037481452392403132008602719590");
    if((a1 + a2).to_str() != "-19102236652278214179567186982117859693942538800975930639269342093507956873984210913434737265382501401225390067729833808671546209448498789119907891454204369")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-4077412017604673660943261687250316061502809005353619947060591273337006335312743614589102228268538229681310444064841608674787554821324013078778345581890068");
    a2 = BigNum::from_str("4678503635056235561204613150212878553762781198848805301219448224865588561117497404669636160359491499258005207875375452085122932496617650347072055057926971");
    if((a1 + a2).to_str() != "601091617451561900261351462962562492259972193495185354158856951528582225804753790080533932090953269576694763810533843410335377675293637268293709476036903")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("11202755577103137850328687750235111587152892714525947812461538546481882853243732028079265067936693094806016264238579032677548415045134258212856371659222548");
    a2 = BigNum::from_str("-4230891174222723021663181844595022802894840727450785631506963703182371628927811741926080636112970223046536810077044815934518575169115353052372733697415972");
    if((a1 + a2).to_str() != "6971864402880414828665505905640088784258051987075162180954574843299511224315920286153184431823722871759479454161534216743029839876018905160483637961806576")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("5320172360715469342474884004178405257872878221812124416086954434965325896333505889359485797527747087824621125456640203515798120144756887856136226552441511");
    a2 = BigNum::from_str("-1572825512893880354396557849360754158936051824942100739992605577979788847886702995382483867919929317175725224004958035221444270727255844900437625795675418");
    if((a1 + a2).to_str() != "3747346847821588988078326154817651098936826396870023676094348856985537048446802893977001929607817770648895901451682168294353849417501042955698600756766093")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-13385750099828480928650426658017959576501776586975953680196658866786574122854459190394876225671270148789884332584718937208761476003121041259552805869082520");
    a2 = BigNum::from_str("7540354945516208739464174080951076738263518632633426055669776769618667736103679413163079640226311855852393806342809830312944566957550355135479654198503619");
    if((a1 + a2).to_str() != "-5845395154312272189186252577066882838238257954342527624526882097167906386750779777231796585444958292937490526241909106895816909045570686124073151670578901")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-927419378433268321904508256212800595862453931168961361649882215316558513219475897176126190560009163946337131350131451232607093012440954121461919693366364");
    a2 = BigNum::from_str("-5706735002299560052950466541005680317476055373319871285304804109225248522146340793051563720735894163817911494458011347403444269826637287351592484021441314");
    if((a1 + a2).to_str() != "-6634154380732828374854974797218480913338509304488832646954686324541807035365816690227689911295903327764248625808142798636051362839078241473054403714807678")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("6488730887706559265346910406432839786219856032224546046425449018409656893196141095093483318703323458471072317308182949030150307291558149185204529266512193");
    a2 = BigNum::from_str("10064008953262098433596585905432064403675321504828068190966003533475640401155161312062023933295003053003935248448779871715728270494326087535377736474879998");
    if((a1 + a2).to_str() != "16552739840968657698943496311864904189895177537052614237391452551885297294351302407155507251998326511475007565756962820745878577785884236720582265741392191")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-3941038028361689748531339381031835451610999987363773866735003432353568312626891271211512700994738224072304353092640981915908394888064999605848153847322522");
    a2 = BigNum::from_str("-5739050628855253055376071273690484485803443613407259564788604875798959482347355452359841223569942694433395096629345101116396129595262929350524176766656097");
    if((a1 + a2).to_str() != "-9680088657216942803907410654722319937414443600771033431523608308152527794974246723571353924564680918505699449721986083032304524483327928956372330613978619")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-6152422456032674015352367677410095646031481128719128381848168029609858730124668764608413591276633782554711916236369147011938071739077504964533061754140460");
    a2 = BigNum::from_str("-7467529917893523240341734431676664384429795759293265882311549860068638670962378200069680963386843916836470126461213026152190295655248862175274844375148285");
    if((a1 + a2).to_str() != "-13619952373926197255694102109086760030461276888012394264159717889678497401087046964678094554663477699391182042697582173164128367394326367139807906129288745")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("12656461001807223971922548127733686991178133070919506164302894891224485422383581713930112844506593817300379997195515610183548740679295665925901380124597767");
    a2 = BigNum::from_str("9421267649073886093140365317569008340768759327190170935582116195170950992256486032557494556958103649986350824527828187358239137222249983844752411824081958");
    if((a1 + a2).to_str() != "22077728650881110065062913445302695331946892398109677099885011086395436414640067746487607401464697467286730821723343797541787877901545649770653791948679725")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("12904189538793664366838178410926668280211615474774070187523506980155594401335109111171516163195346224594658626530665177304693502549357554194603579546574867");
    a2 = BigNum::from_str("-913103047897659293024337124773675896390926511800643048459143324533974541999103944427994411415263768269970186333812730986108441962000416576163903606783266");
    if((a1 + a2).to_str() != "11991086490896005073813841286152992383820688962973427139064363655621619859336005166743521751780082456324688440196852446318585060587357137618439675939791601")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-11366639749015513959739688364352044829092618186264909446351900165175163201529434158208294144115242601859198247875046308612839452105864838172935443786166215");
    a2 = BigNum::from_str("12442319450732684603714756682943273210133841569961946374707191341581675112884881346399854326637726139631785712734405357914554254626575904167276778973917268");
    if((a1 + a2).to_str() != "1075679701717170643975068318591228381041223383697036928355291176406511911355447188191560182522483537772587464859359049301714802520711065994341335187751053")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-4631461970036198230884130006876182291049684362960468002229049867363524237333772836017432193798601940664474507272988600843914283843162949040175237490416168");
    a2 = BigNum::from_str("55253990164834875345043593065873230543897399811317825992845772416727721314532843215619254976820987158188860707356975886903895122317501404626607726118251");
    if((a1 + a2).to_str() != "-4576207979871363355539086413810309060505786963149150176236204094946796516019239992801812938821780953506285646565631624957010388720845447635548629764297917")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-8420310168305189171966077006531859581742985731696392844570204860627940576246637829831705060478841761280016874674051772434179055414380083003809515446304735");
    a2 = BigNum::from_str("5821411699493063488752521740724683506126008096932991892640866183188298772248626393508179264437564891825043808147350371967427194382001925534397034203929884");
    if((a1 + a2).to_str() != "-2598898468812125683213555265807176075616977634763400951929338677439641803998011436323525796041276869454973066526701400466751861032378157469412481242374851")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("8549682191175386552241625741672675702082926571944585884685065040233653005199398037554933027342698154904626096588122098833731928541210984381844127315314594");
    a2 = BigNum::from_str("-1613598653704887271549495803408356404651046155109770730961066609913416112454530242997423760111512660959440050136589040093332248560952092909198187701712747");
    if((a1 + a2).to_str() != "6936083537470499280692129938264319297431880416834815153723998430320236892744867794557509267231185493945186046451533058740399679980258891472645939613601847")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-4021038963742590248680509720190525162151921078087418659692487884460528150978610886971197982866021389052994273842326295641712294250139388027675388129744193");
    a2 = BigNum::from_str("-2185955728482804297617621599493462055149358386949442562579054627124675294597515977883632726943068284511018761736636097502851684820449105337964923901802594");
    if((a1 + a2).to_str() != "-6206994692225394546298131319683987217301279465036861222271542511585203445576126864854830709809089673564013035578962393144563979070588493365640312031546787")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("2716088745122065675549228240966829130936284844599629650459317900186959212057613222349988144740428468786705257895868780418909228779236483541420171185452253");
    a2 = BigNum::from_str("6746113422033855748565025116105075767589341738436783118952080019689576779546358394970498020318384328469245093124501827226505268978110235750584927296298587");
    if((a1 + a2).to_str() != "9462202167155921424114253357071904898525626583036412769411397919876535991603971617320486165058812797255950351020370607645414497757346719292005098481750840")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-7355776671550651668115062175760894304379516243534015302372750516738924952155931833811448760771213212205570293594574362298679129358474411597672351135605456");
    a2 = BigNum::from_str("-10642609360296920219683648489748227773488615186538806337508632255335947628036536117726085028304473476984262172186579628476753698686597569658248332585803869");
    if((a1 + a2).to_str() != "-17998386031847571887798710665509122077868131430072821639881382772074872580192467951537533789075686689189832465781153990775432828045071981255920683721409325")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("12460362174127067353048680890535003738161952414023281404628071572899482823372578370427839115599548325944715068888923240248187307846908403170698530573004235");
    a2 = BigNum::from_str("8045632090342178934002479497443661204476563892376616027701541261332689997185128167638240127355877300074112213147187780935898914694292010401110619579841576");
    if((a1 + a2).to_str() != "20505994264469246287051160387978664942638516306399897432329612834232172820557706538066079242955425626018827282036111021184086222541200413571809150152845811")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-10671787941815360690480971028806667908234957926902413076965162729000843941997959237072110533193979914652950574538592821033587636605001327109658933227926122");
    a2 = BigNum::from_str("11648547080372264155073145013793867753009884893699741303837126294818528637273066462639337229019245072474264490413728043600233616714352139037383576479255295");
    if((a1 + a2).to_str() != "976759138556903464592173984987199844774926966797328226871963565817684695275107225567226695825265157821313915875135222566645980109350811927724643251329173")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("6729958250293564764022381432950742456943471913753141832279383181114432165677284296399684067486363317055870467401954972416168830991553456360211773732580331");
    a2 = BigNum::from_str("7672222025400958051346843178910448700393165313520981597160811019696795400337013026631543021770634643453781224291391135082548232974920826042418262474337313");
    if((a1 + a2).to_str() != "14402180275694522815369224611861191157336637227274123429440194200811227566014297323031227089256997960509651691693346107498717063966474282402630036206917644")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-6049393680602182803346899959769796425026527586818910924815728752417022253496902124169741344238129730177511357887624741892437590087794003302924770522667963");
    a2 = BigNum::from_str("-5904555395357893582794154441260470154306597803148184788231899307249082585137621001987380180656294717334014337564383759530993178710520695302233302905220996");
    if((a1 + a2).to_str() != "-11953949075960076386141054401030266579333125389967095713047628059666104838634523126157121524894424447511525695452008501423430768798314698605158073427888959")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("9233222241744343408950248553260284263026730921461403749690862102891044494178262947654362723702261884598939316754427220843249583568160478889284383472067464");
    a2 = BigNum::from_str("-4314630876439413118693087023750898414430994551558396855651817329938290106706687751917853757831595424510182526876639631131072506730699508811224485105385881");
    if((a1 + a2).to_str() != "4918591365304930290257161529509385848595736369903006894039044772952754387471575195736508965870666460088756789877787589712177076837460970078059898366681583")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("1516468016364276925570982537520430675970892759980746668299958249199378587822676469553718566909658614276331811643797730595631692808738316993918262659603471");
    a2 = BigNum::from_str("-1444323742097023996457701279515964810120825629520416814302830909075287314957272174295805508420563340261751708755114727935985765494158984587751249204308473");
    if((a1 + a2).to_str() != "72144274267252929113281258004465865850067130460329853997127340124091272865404295257913058489095274014580102888683002659645927314579332406167013455294998")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("-10622245792820217416009965417974836212655967152649586688832790162355208525597225872942270508344570848449112632936325555197346900167682257604945194159696952");
    a2 = BigNum::from_str("-912444463705601323072304562742473315891530197830584446575315825100307155264743598493098560813452936880625343942166995830433042430132607874306783974751267");
    if((a1 + a2).to_str() != "-11534690256525818739082269980717309528547497350480171135408105987455515680861969471435369069158023785329737976878492551027779942597814865479251978134448219")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("7601740945267186058576472156689045441938791519935142998941649873206410262248332139377012711892256539254343591714687693178958819532537060597206127590988396");
    a2 = BigNum::from_str("2863741389591730343143680442609826186177796291476812092241119585695807447961734075483388797367336828994331531199183617119146384247038416975242686698898423");
    if((a1 + a2).to_str() != "10465482334858916401720152599298871628116587811411955091182769458902217710210066214860401509259593368248675122913871310298105203779575477572448814289886819")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("4099425982485683420223175329896994383889321500464902155901035411386515368949782717661009235114388053293580061225794470079745763231281907661111151485642846");
    a2 = BigNum::from_str("-146810235014168226481006655352137031389026143074480906590851812160522753972620101206076916508142815023396204389345203475189966115650013989818871200878212");
    if((a1 + a2).to_str() != "3952615747471515193742168674544857352500295357390421249310183599225992614977162616454932318606245238270183856836449266604555797115631893671292280284764634")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("4740343531083541763013832288233969160406502398243983384185934082850726316428822224461645981087656901905673125771338147222047647031713638217662375678227344");
    a2 = BigNum::from_str("5348787481356847416952748367929288493604295925220440362452294519295170300180263921803411689410660997931647288117384734056679300917340789229856617068309501");
    if((a1 + a2).to_str() != "10089131012440389179966580656163257654010798323464423746638228602145896616609086146265057670498317899837320413888722881278726947949054427447518992746536845")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_add");
    }

    a1 = BigNum::from_str("7310804920870371740753196191833181901539321488491649550903250974456754265427961193694500598973493708280058963454620416622477841316576366060715409026167852");
    a2 = BigNum::from_str("-6745002154840271394006231139810488328672834718423840422319522726343706805071646484058710039240525759175036337814354006161979235597566824771492503884273821");
    if((a1 - a2).to_str() != "14055807075710643134759427331643670230212156206915489973222773700800461070499607677753210638214019467455095301268974422784457076914143190832207912910441673")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("930431986895521499047493246880987651631116596831095498982054547981572953190239146632295795185468473686291818648726757189788241751721853899269374633954307");
    a2 = BigNum::from_str("4169423024756093849895964782352704951473211896645081523599267502752329854418521856008583299114483998269370039417329384501553137259744662164906303269126072");
    if((a1 - a2).to_str() != "-3238991037860572350848471535471717299842095299813986024617212954770756901228282709376287503929015524583078220768602627311764895508022808265636928635171765")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-6213037062210068312471448181324034668208866598903903322241904498035701725847905102211327251709656702814066956450448030484484370012483517457220112309273296");
    a2 = BigNum::from_str("-418910213642750010643145010428802696297483343991723365592583888393774306957116317183564326937090960984625009952342791528864102997114784622050907580260739");
    if((a1 - a2).to_str() != "-5794126848567318301828303170895231971911383254912179956649320609641927418890788785027762924772565741829441946498105238955620267015368732835169204729012557")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-3551690170913660683908629349302975447680046664492723612738330552401010673236698855683213222881549639740888696815774570508338291830324427949250780401463893");
    a2 = BigNum::from_str("-1951919341858025144757869118238079313574180671689679128253507238763829843839026252467566186955907951669408563773578803202656052190120432512383474052728853");
    if((a1 - a2).to_str() != "-1599770829055635539150760231064896134105865992803044484484823313637180829397672603215647035925641688071480133042195767305682239640203995436867306348735040")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("3178607789476545922263748466346703098486296146790754980797489216575276884604434608784530162773800156448136673405516573970862963117633949105461155684928327");
    a2 = BigNum::from_str("-11642611933352676089324103952803221007170201447500090180500968017128498678110617011519436902703632316124871416118372526538339672274501292229166989314426571");
    if((a1 - a2).to_str() != "14821219722829222011587852419149924105656497594290845161298457233703775562715051620303967065477432472573008089523889100509202635392135241334628144999354898")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("4120179466049483247027186742207105170888932303760553643522693418751513646729451099514736607278622433959907055407713290396453944330993233208848608032504498");
    a2 = BigNum::from_str("-235210764324371409025895559363105626251185265968438420421363770142172743557183896644506248145665461263992857865797563266373042179453279049128631025605742");
    if((a1 - a2).to_str() != "4355390230373854656053082301570210797140117569728992063944057188893686390286634996159242855424287895223899913273510853662826986510446512257977239058110240")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-7324091037345523231595099302557886088596198364487278920834628831272651636661964412382739602376595129036272181627266734960271310487515374925252938799854189");
    a2 = BigNum::from_str("9872850582798180739635825573310899489191063054608697606213027715662600905259529351055042647349177813292106924685463938378992589927791487606087911472741162");
    if((a1 - a2).to_str() != "-17196941620143703971230924875868785577787261419095976527047656546935252541921493763437782249725772942328379106312730673339263900415306862531340850272595351")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-5581833284563552981737510622327049890662584448072516135737466338605930996805301159434106965373095730459331379463933775917020829274479089533115015190272400");
    a2 = BigNum::from_str("8084014315152267773393072702042847860775855367925623363780471514832629938075654736843875443934755894114120787385294558892776573981347166801516457208006097");
    if((a1 - a2).to_str() != "-13665847599715820755130583324369897751438439815998139499517937853438560934880955896277982409307851624573452166849228334809797403255826256334631472398278497")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("7511202784094555937662018094650314987495484922610516664308805584139897993366156807054182463897338809530427705264260017138287454095962072677112034202119145");
    a2 = BigNum::from_str("12659637749176813234091021844680882903208639961601873806774759662828912429535322496037147730199241547389122388273452790710792129744620646513178095621822447");
    if((a1 - a2).to_str() != "-5148434965082257296429003750030567915713155038991357142465954078689014436169165688982965266301902737858694683009192773572504675648658573836066061419703302")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-10248900480147602835957009430300355119614055682534816902567640870611646460628179625430506248327717791308922300119076687155680255561626614708577389762522374");
    a2 = BigNum::from_str("-3607444917516438026625341886936598482741723530099590242727576768437991015983125174525074911007117393770611423755200262466317042587780144484793314893343603");
    if((a1 - a2).to_str() != "-6641455562631164809331667543363756636872332152435226659840064102173655444645054450905431337320600397538310876363876424689363212973846470223784074869178771")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-1364027753287470865934576549380043307158622555930659840300732731348159218064069287738628277737231507365258587905436934823374480893719194801749541774141814");
    a2 = BigNum::from_str("-11722089001423881235946234995318354889992578161053089139880147816785702948448833810077244910759184178798293010524332982009754989696835667374979815359444351");
    if((a1 - a2).to_str() != "10358061248136410370011658445938311582833955605122429299579415085437543730384764522338616633021952671433034422618896047186380508803116472573230273585302537")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-1148229962685007383202671051751061870957708993149500159045200599110223024980858826939215860868491510319682239709549184810818023490268516017856903827213319");
    a2 = BigNum::from_str("-4599987046678596171638416664193924551688038462653730662471678321002520284356582181846527823277875069770163310120601375289767506806876440995022765416747219");
    if((a1 - a2).to_str() != "3451757083993588788435745612442862680730329469504230503426477721892297259375723354907311962409383559450481070411052190478949483316607924977165861589533900")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-3141059957447433755926217181030113047954344956935804946290514066136022361405960998619984865348305473849667659357756837077810195984916408968340416504370094");
    a2 = BigNum::from_str("453936609847019043292798468118393919566073652252418534252883762568547768670895608728323161711698774148790163295128001588914638711436874453629003224468942");
    if((a1 - a2).to_str() != "-3594996567294452799219015649148506967520418609188223480543397828704570130076856607348308027060004247998457822652884838666724834696353283421969419728839036")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-6992140614260440534741122098859096742174943370007929670502910195383269137622465641037758478018474262336172925201389434704237885511673016167426619732695928");
    a2 = BigNum::from_str("-10439651845284118811492789530754058683164886265914511752647071868009207567931875294774686037187564265529488346330948547218261875891617428521645241608885194");
    if((a1 - a2).to_str() != "3447511231023678276751667431894961940989942895906582082144161672625938430309409653736927559169090003193315421129559112514023990379944412354218621876189266")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("712072251007253720180452871029314733867368978297866756099118990240999154065336072611516450948366288824180924496163674986274987031864805274634045588423866");
    a2 = BigNum::from_str("11279935420153794966842801195307821976740935155800871490210036918266621574261264417266108320672945730270173464695083871614290507682563064331567198047141120");
    if((a1 - a2).to_str() != "-10567863169146541246662348324278507242873566177503004734110917928025622420195928344654591869724579441445992540198920196628015520650698259056933152458717254")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("1760758974042881493575497491414137162086698047605986331213773489936901332198036073465132059887867228407003755178796349793982272441579595097353117693213737");
    a2 = BigNum::from_str("-3919575811033091727122878836897830624734706564506133668604084091255561762852154578800819035482504152733070993285241015689681806139295685996109672846270669");
    if((a1 - a2).to_str() != "5680334785075973220698376328311967786821404612112119999817857581192463095050190652265951095370371381140074748464037365483664078580875281093462790539484406")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("13354898752863592374788102942574134099976279209924142122614804054958973269785471393420248840126510906602159109174970316549694242664611661176770555520179780");
    a2 = BigNum::from_str("-12541135754743313677428675483579958004384095884258428500000571476676408123356077110609268241882565247721435155015213723315868442581533476206982102789493820");
    if((a1 - a2).to_str() != "25896034507606906052216778426154092104360375094182570622615375531635381393141548504029517082009076154323594264190184039865562685246145137383752658309673600")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("7964578756890931440878767163626705158113020750076397116279225545407326164510596062134716377728961428129718565294790073624533408072177549630875163964267091");
    a2 = BigNum::from_str("10128420976577606741846632070230091096119243435738185161731712910373786114859297713576079337631177711055667505254719218737191877831099423672677702652793607");
    if((a1 - a2).to_str() != "-2163842219686675300967864906603385938006222685661788045452487364966459950348701651441362959902216282925948939959929145112658469758921874041802538688526516")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("4387021049218408568429727468754950173961795129984380739121151600218901673499766897923589684329378766196461912156084920856890708419167330426641677409250250");
    a2 = BigNum::from_str("-11568372629773294032065579505465907586381575383480414836094828085180312601340183491955364584319030842189726410851004349051022579737951495664960932319047368");
    if((a1 - a2).to_str() != "15955393678991702600495306974220857760343370513464795575215979685399214274839950389878954268648409608386188323007089269907913288157118826091602609728297618")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("4184012197887827016826875813249821218253849925275335411364809482702546461952285188255420530136670835204693064979161750461355252482718983350206377410346573");
    a2 = BigNum::from_str("2785374804102220414750451932512515194701114168836741277964382650651679331075899733204118159927530445199264073266802713433008309175862997251920502849953267");
    if((a1 - a2).to_str() != "1398637393785606602076423880737306023552735756438594133400426832050867130876385455051302370209140390005428991712359037028346943306855986098285874560393306")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("4024696581587799064959122000619617132472979033698363078313888268705939445715129512074972168758113523233145285892634428631165316468715830683799424772807893");
    a2 = BigNum::from_str("2335099851813061858131309346449852378970285137199685343129139792977863995614030808795901314555598169652520632214343964899526076050804902875221310723108404");
    if((a1 - a2).to_str() != "1689596729774737206827812654169764753502693896498677735184748475728075450101098703279070854202515353580624653678290463731639240417910927808578114049699489")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-9544129836725667850848562644417372195940568144841917465822868429531601975651465261281677146673097059829143262949089004971128872940688999941045423566162913");
    a2 = BigNum::from_str("-4125124056508774919298121572261475551976487591278901791017600620620008031713211110674074784112278217865254987309573103450601006609535098058010686414960782");
    if((a1 - a2).to_str() != "-5419005780216892931550441072155896643964080553563015674805267808911593943938254150607602362560818841963888275639515901520527866331153901883034737151202131")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-9568747783664803325027327860856360539255930185604510536057270389231589741565615270927836282008014606126361135163369911460613572615514410742928575308979850");
    a2 = BigNum::from_str("-1265786145387013615930368493811516707484777378399152913478070438285478817908376445641189960101319078464237408293459007216590770370155352186551304401627906");
    if((a1 - a2).to_str() != "-8302961638277789709096959367044843831771152807205357622579199950946110923657238825286646321906695527662123726869910904244022802245359058556377270907351944")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-9847257247942814018151000223011452073245682109523286933570589620561175204216012385889496501745188817551627206906910589273765885867692880318113671598042601");
    a2 = BigNum::from_str("2153906552392016669977299887697085802678073068127202420366733371003821556142715726301474524928308089512256823369256774473703189854916918614966755387549738");
    if((a1 - a2).to_str() != "-12001163800334830688128300110708537875923755177650489353937322991564996760358728112190971026673496907063884030276167363747469075722609798933080426985592339")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-5443874152515320281006611783233361192646239443714694407781754468278022127788028822336945341093565869711596046818249279300009816540862269112601824477774337");
    a2 = BigNum::from_str("-3720360359054160358418461330971441109101256998816871106155192318164192488244155003504425425007298152923076258787876918492082416448633506726764684154816030");
    if((a1 - a2).to_str() != "-1723513793461159922588150452261920083544982444897823301626562150113829639543873818832519916086267716788519788030372360807927400092228762385837140322958307")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-3173773991598613266838889253909723900159814316282994597233333179336593415542633043072091928060288867261186917788577382853546814865339557233359338694179432");
    a2 = BigNum::from_str("11060344711633456718554521605415850900693102346650661893435495101986714233193506449544215964474193858277149387333880541501660061438162182788807967972732708");
    if((a1 - a2).to_str() != "-14234118703232069985393410859325574800852916662933656490668828281323307648736139492616307892534482725538336305122457924355206876303501740022167306666912140")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-275560107768898653096729514973563120193340442389782388382661153559383052984979449382086366012176523255128281233583230498856987989294997892267501639045327");
    a2 = BigNum::from_str("-10454314443589187453494231568718050673868006857214928441918973131033338371837640633584280091090325745757265950181820465559709218407651050374511123451971842");
    if((a1 - a2).to_str() != "10178754335820288800397502053744487553674666414825146053536311977473955318852661184202193725078149222502137668948237235060852230418356052482243621812926515")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-8447527164663556737841874553351072719155490017953039908135361602779067916724077690930904277800004173290901299174983370622026475211338276388488769115816205");
    a2 = BigNum::from_str("-2633436506512377736738321344543868331546843175898333844111966339779879881510837494812729071706510319072066886264085528037193234484911988188854194449297735");
    if((a1 - a2).to_str() != "-5814090658151179001103553208807204387608646842054706064023395262999188035213240196118175206093493854218834412910897842584833240726426288199634574666518470")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("2377060818348871485587641389929251680896423099275007208251123470852105142916532160091332484190907336145117587279281136850306788570395889337573615169900960");
    a2 = BigNum::from_str("-5177160727799460739519699269635210608317437356183813884679890594707798835925149108333963145258545701186682066267232159886134357923228502859663262019985920");
    if((a1 - a2).to_str() != "7554221546148332225107340659564462289213860455458821092931014065559903978841681268425295629449453037331799653546513296736441146493624392197236877189886880")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-10820092318471123324969540197844453163460536158232581216032031363060342668835577426274243747788209490792908573406993749809741066339548312595404567087139667");
    a2 = BigNum::from_str("5565803254593795542072124299518236379132736788012738179533470311549073750983038004260535936127073115537422319276620174641355817635798238365467411577104828");
    if((a1 - a2).to_str() != "-16385895573064918867041664497362689542593272946245319395565501674609416419818615430534779683915282606330330892683613924451096883975346550960871978664244495")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-11764544330585264644709752098686574156292301957751266645085904460489128561519608125401202787582029984675725802214419924316431716482597351520439165608919714");
    a2 = BigNum::from_str("-2273596361872659223532957733749580698883438120903561084840955854678377640163967791836345127058658788999395932446251126267059953054648516787980661132528179");
    if((a1 - a2).to_str() != "-9490947968712605421176794364936993457408863836847705560244948605810750921355640333564857660523371195676329869768168798049371763427948834732458504476391535")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("2333998102100117621125347364570095534336058862174198811228813267527244279269179032406164425432405564697756932175857153742857704400066395898253389766720214");
    a2 = BigNum::from_str("1399298884359580404888278778454054343008172875285890667100570419855373974241081634371107069858861827622914198836060566314980028232869293067477850816602056");
    if((a1 - a2).to_str() != "934699217740537216237068586116041191327885986888308144128242847671870305028097398035057355573543737074842733339796587427877676167197102830775538950118158")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-9283916200712956604598806005547004280372733131710224735753524810959065405531738627139567225227338053824125315719887990393371237433746096789198206576252849");
    a2 = BigNum::from_str("-7561183970436391087184084760567727136408666217063501771648169743062224206293845965103513263956603493359826891328927177391070238260070742922988892330732539");
    if((a1 - a2).to_str() != "-1722732230276565517414721244979277143964066914646722964105355067896841199237892662036053961270734560464298424390960813002300999173675353866209314245520310")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-6961141608716444301859156101728287840725564764012723920996296089058530184869221381053319081159496837923993424298103235840465363167952109914315709861526815");
    a2 = BigNum::from_str("10317864548728391207567008159597117752066840217881245167901762205738168330730717587847430606464816966937318159458722101484667306716144833376950667943729897");
    if((a1 - a2).to_str() != "-17279006157444835509426164261325405592792404981893969088898058294796698515599938968900749687624313804861311583756825337325132669884096943291266377805256712")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-9399607141900610023631492446819854622645206076728733932099609780754159972702689936966022907010971466494260978820479108015708613697762955297006793619306924");
    a2 = BigNum::from_str("292507925549261701307481123779114761682737182945809813423397712203402887715634276980193599863208757959241293771871540785819283459423906927271066287304735");
    if((a1 - a2).to_str() != "-9692115067449871724938973570598969384327943259674543745523007492957562860418324213946216506874180224453502272592350648801527897157186862224277859906611659")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-12602800056317108990071590201834709322348784143984178486217074779076957482060998462615790247063031891480128027812149681025385166950345070207389566199357864");
    a2 = BigNum::from_str("4809320876459382745941393890128511963352494289242037025828230371296468390030283558139571609014901239155321713410891749047157717144154350580628505645207029");
    if((a1 - a2).to_str() != "-17412120932776491736012984091963221285701278433226215512045305150373425872091282020755361856077933130635449741223041430072542884094499420788018071844564893")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-11384190868449765124339381905462280737833181135711670002611706645064341138045344179345986143387952080719434999639612492445014703457648557600419670697166391");
    a2 = BigNum::from_str("-6832936454601098818599514167235240447707901894398178087613082725157031603427321660231680512614020529757359627604612677382112354576567009154042926180889528");
    if((a1 - a2).to_str() != "-4551254413848666305739867738227040290125279241313491914998623919907309534618022519114305630773931550962075372034999815062902348881081548446376744516276863")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-3814752307352633043164506187529022429877264877826799369534872870707998337574358032056718060572918312355009069487811866249157013308876581716061048907848041");
    a2 = BigNum::from_str("7614126842608651457447519967559433287148435094307914592889657989789848906984062093439077588074743679852113666259460255397130995363609430841764720232354906");
    if((a1 - a2).to_str() != "-11428879149961284500612026155088455717025699972134713962424530860497847244558420125495795648647661992207122735747272121646288008672486012557825769140202947")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("4822407813549962809294326617002157351180797065773130467532909900753167601693630381687857916780769924043352044940581556311191597299991260521152140456324969");
    a2 = BigNum::from_str("10143352983399290436433258434445963585176939430277600415295814894441199035758838370051728856583386427817611061226486445759617500738604807442052411549597277");
    if((a1 - a2).to_str() != "-5320945169849327627138931817443806233996142364504469947762904993688031434065207988363870939802616503774259016285904889448425903438613546920900271093272308")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("509719705846386470699396990194555140155278046576531542035694747001851743662293880173056506878711025500040927528787908496852705098515651706469840351285227");
    a2 = BigNum::from_str("11214805364999466454234350996381316148388981398396982016475700814402766407099040343304508727951159539722639110268686540866895794117937851503540064854100342");
    if((a1 - a2).to_str() != "-10705085659153079983534954006186761008233703351820450474440006067400914663436746463131452221072448514222598182739898632370043089019422199797070224502815115")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-7429897714170071201814884860060472949844668498859211752786322850969631468133232647130551020141326867491751796787292841162287036216052293541202122187473998");
    a2 = BigNum::from_str("-10532128543548827516392635725159678660115350886632363763907292130035257392195060932538483305263642946123375815807904427033747790653424106008040737267412952");
    if((a1 - a2).to_str() != "3102230829378756314577750865099205710270682387773152011120969279065625924061828285407932285122316078631624019020611585871460754437371812466838615079938954")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("2541245458304612526376229427976712597404138617487886736169558426070692983233357350450221293163396376567591862904154325445577594505979433636381815781391945");
    a2 = BigNum::from_str("6375991668105445878544548283863710941381967961069515412276793575169849655057903784162601563848324910303474436657855958731367981941354539952150741935286918");
    if((a1 - a2).to_str() != "-3834746209800833352168318855886998343977829343581628676107235149099156671824546433712380270684928533735882573753701633285790387435375106315768926153894973")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("12405477152477329099563440355172936351004150628987497532605968617498348220346342584083691857245730648387489248623854144227735885245990999455605908091546394");
    a2 = BigNum::from_str("7126458173323593694133116140913936971918404679345734606120857909685241219507207079036979956429619538714480455986264454681110645255351952099436062249306943");
    if((a1 - a2).to_str() != "5279018979153735405430324214258999379085745949641762926485110707813107000839135505046711900816111109673008792637589689546625239990639047356169845842239451")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-8240708225342464718063441022065662654194119750853761082721835833606191784510514646372084120876348024508734603793655135771786382146978931282631525043574254");
    a2 = BigNum::from_str("-11803462885691996465585929512489540784916619887818224709024376870397458622032556213942852283221001133125651380747572737414420038203362622141448223396608810");
    if((a1 - a2).to_str() != "3562754660349531747522488490423878130722500136964463626302541036791266837522041567570768162344653108616916776953917601642633656056383690858816698353034556")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("4069469103088279720840488333189660371253806613675616290244077357544956715272370132680128785960575013294324848715015272722243654106299079568523345625888469");
    a2 = BigNum::from_str("13358475233978472933137530945108892130849001466763358692484304415788952936209875320117601021999381569927714886463345181490352548702036366832111441825598302");
    if((a1 - a2).to_str() != "-9289006130890193212297042611919231759595194853087742402240227058243996220937505187437472236038806556633390037748329908768108894595737287263588096199709833")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("10926070422194838095987944390750938716838709306841295912532340768221262818660816550978482851978544760524006554365017235503784573261677516651878886695953444");
    a2 = BigNum::from_str("-4413451051635766388499111615521287381054490985310427380202600218903553291276006949871982398179625339794904982822474014600984428454882836262724069152840414");
    if((a1 - a2).to_str() != "15339521473830604484487056006272226097893200292151723292734940987124816109936823500850465250158170100318911537187491250104769001716560352914602955848793858")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("4719739655867478582417984419315473274565476329281420839612861614391568505125106451406291826645252410083313658788062584443384699354553219812819220379507336");
    a2 = BigNum::from_str("3321912725682189532455867554641097614410486890620881593894329425563504675620452245585132523593960787374991076454258798582618420512826657971281162638747158");
    if((a1 - a2).to_str() != "1397826930185289049962116864674375660154989438660539245718532188828063829504654205821159303051291622708322582333803785860766278841726561841538057740760178")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("3543752166605948037658044719016714830786859113850728156394430879524946908030020517841355949461038591703123726651547203236122396416755493036969603274236130");
    a2 = BigNum::from_str("-5662100482956801024595215511077206541857073402697136630474041837929633609335227504346158761559156150476931273080631462937313861080825014893594619432218451");
    if((a1 - a2).to_str() != "9205852649562749062253260230093921372643932516547864786868472717454580517365248022187514711020194742180054999732178666173436257497580507930564222706454581")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("4165208958506195218671024036430819726919223113521279464657515827086914340772069850038875976026182082032716462159593494599820356305055926179551025746403409");
    a2 = BigNum::from_str("-10683737078633741721629256029213176227287796617863918426098867424553208559583309911202256236737364108951332381950003413719898430475649611367996742916565338");
    if((a1 - a2).to_str() != "14848946037139936940300280065643995954207019731385197890756383251640122900355379761241132212763546190984048844109596908319718786780705537547547768662968747")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-5411453578467257923427079973925058794732833447658915174291201002744745098925367603088781474436600267092450351414190459172844161861666471581690022908483954");
    a2 = BigNum::from_str("-3852656132619090563168201262519557926904304627732633445783353527051467487250476883993724221776502148306242805089415043542592982000115126269529652550140742");
    if((a1 - a2).to_str() != "-1558797445848167360258878711405500867828528819926281728507847475693277611674890719095057252660098118786207546324775415630251179861551345312160370358343212")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("5149593090845633773716659769986862678334618820114161450624462301168551235845693558960513151838790523329622441094366841286815350564221282534221791751106251");
    a2 = BigNum::from_str("-3065973523156953646256102140047319375974039792644635593752440581142403673771740429914200657680377690580235733313581154985298878683982455189361850985319286");
    if((a1 - a2).to_str() != "8215566614002587419972761910034182054308658612758797044376902882310954909617433988874713809519168213909858174407947996272114229248203737723583642736425537")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-4824062730258220908097764899287243051396074633284761028578429399649279986209246417798675585539302046213089827615758384541941001308565945013213424986910785");
    a2 = BigNum::from_str("-4326209034224645466644008710309344234003480388597694603977079987713866040256596385902240114809633222197245800479794913039789258757404223335757265857907964");
    if((a1 - a2).to_str() != "-497853696033575441453756188977898817392594244687066424601349411935413945952650031896435470729668824015844027135963471502151742551161721677456159129002821")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-9620315567874521901091937374882740064184560231061859586569882613612238277320512077184173352367400675698487159410545851058873698879737523185088229568899025");
    a2 = BigNum::from_str("-817581489078728579273590868744088786992744938258138582028919344592845268217253130134186043648744735442519683386915850779215376198074218116986033193620343");
    if((a1 - a2).to_str() != "-8802734078795793321818346506138651277191815292803721004540963269019393009103258947049987308718655940255967476023630000279658322681663305068102196375278682")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("7889355119937187458005730782814094420759249560374497330896246713353336816567387804098545785097643071028413390116279218491274106364508335471655368629102201");
    a2 = BigNum::from_str("8067455658325248454895148985833880168132956311726874566445152770193029366492301088060347220942574823190305324343630774647978071608061463561861033177369976");
    if((a1 - a2).to_str() != "-178100538388060996889418203019785747373706751352377235548906056839692549924913283961801435844931752161891934227351556156703965243553128090205664548267775")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-5255820840983045501651961007414506126906775405551182817248183507645922363017417797719138859836357880946516258983312103253384050986568457334927390606286604");
    a2 = BigNum::from_str("-12509703320310313268730210340179020412892232298056311439889000899259287691489374950703124468043903782897298607804521098351674081568087039958271657085584804");
    if((a1 - a2).to_str() != "7253882479327267767078249332764514285985456892505128622640817391613365328471957152983985608207545901950782348821208995098290030581518582623344266479298200")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("8764422245335593474369289136961824190979374386567921233681673475447778279305609607367202052997713467855736972970195769132647757500845304216895091752831771");
    a2 = BigNum::from_str("11389472892777506463156057450710591639387229946276053351847097800213981543546351806433798431890548888643069707294229106772357801032411476243101956037868001");
    if((a1 - a2).to_str() != "-2625050647441912988786768313748767448407855559708132118165424324766203264240742199066596378892835420787332734324033337639710043531566172026206864285036230")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("12671575835039588773018663689659905197208453157079045598640766883172271808146349789279347413071921743485072412820236226722224007600974744080454866544924279");
    a2 = BigNum::from_str("-9112046773110700700007162791194750655778479912559925003126492776485954929524975499365765394177255062189897589475185291246041214617756225226845592281662569");
    if((a1 - a2).to_str() != "21783622608150289473025826480854655852986933069638970601767259659658226737671325288645112807249176805674970002295421517968265222218730969307300458826586848")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-12677593478569214259162923566711824918267907894464200116101201423081146500103968568083775170604004566289726742190695548010940019406964130458893328288530293");
    a2 = BigNum::from_str("6121673330746023382344119962141795136285263599669205853844000058165991514174523257619051969303464760855510397765313381861433702896532347987430576457331264");
    if((a1 - a2).to_str() != "-18799266809315237641507043528853620054553171494133405969945201481247138014278491825702827139907469327145237139956008929872373722303496478446323904745861557")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-2092184006526814507427322383299574931479750330264685650794333187887411273526427295645745515274172985859491635087066205105936088869308824559769819340628213");
    a2 = BigNum::from_str("-6982669514892541911814939602369934776584063471857776629688269736747178764882175648267579320136651024761846324326831405089447555099071812243324395670131859");
    if((a1 - a2).to_str() != "4890485508365727404387617219070359845104313141593090978893936548859767491355748352621833804862478038902354689239765199983511466229762987683554576329503646")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-9325734114318414120688200751378009475181145363644180264254829346097981893824304368065920788000178283770388070560578187503025601224198325205413331711308683");
    a2 = BigNum::from_str("12177770147413433713158181742996865741696114308734028847588077015479402120265033222887132654244241179488609730113637847047960681882059252429762628665120231");
    if((a1 - a2).to_str() != "-21503504261731847833846382494374875216877259672378209111842906361577384014089337590953053442244419463258997800674216034550986283106257577635175960376428914")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-5740082206447893791476620004460814391551600305351553590849569401679374881055430861913620370366133821679704250517822635674200048326253823983046736020730701");
    a2 = BigNum::from_str("5612491154606203592239363938866037843409549635928962151139185777732627022172634465156821459537926099834058643578607927815883279195443032924524736962557825");
    if((a1 - a2).to_str() != "-11352573361054097383715983943326852234961149941280515741988755179412001903228065327070441829904059921513762894096430563490083327521696856907571472983288526")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("6660769110998894808602822535992351511877941478144442428669985049096851216074404534905267835664178253276534017907536483742563253624772133212969134911221006");
    a2 = BigNum::from_str("791320906000245059141781096746923471884490878806896121876177869432054020210846895124031268633836844227311432790464545819613571264116358926427615400777919");
    if((a1 - a2).to_str() != "5869448204998649749461041439245428039993450599337546306793807179664797195863557639781236567030341409049222585117071937922949682360655774286541519510443087")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-947581062496140030840916045658734401525292841086363788371046045066733674520132966344137760118603750347140130732938621265416287575478737327858614842763351");
    a2 = BigNum::from_str("-10448601971565771108508227032010410043730846507690052120836688130031950995325061407950357517070251419110471454782585478157778643580390784403153225156384597");
    if((a1 - a2).to_str() != "9501020909069631077667310986351675642205553666603688332465642084965217320804928441606219756951647668763331324049646856892362356004912047075294610313621246")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-12177518590956090436640076250207095341409713003472451174449635787809594877848148039785160871844131260687204752360626522310937093276015085861472483540927294");
    a2 = BigNum::from_str("-5817016740997434928284138713322346089570504525946054463078093592158250195844633643081895148364094039655957709661341862402951867488494811035308039643324077");
    if((a1 - a2).to_str() != "-6360501849958655508355937536884749251839208477526396711371542195651344682003514396703265723480037221031247042699284659907985225787520274826164443897603217")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("11297154561515729966944154562791249655085866955414760602988462814993391633458266888606951920211643668310611347304015834708984116667583161270049841738397157");
    a2 = BigNum::from_str("7971234918623725508137164323049511307922865969047264923565484077341823287647944482340634936537981177060938538042385607312952333704840899925629972888654680");
    if((a1 - a2).to_str() != "3325919642892004458806990239741738347163000986367495679422978737651568345810322406266316983673662491249672809261630227396031782962742261344419868849742477")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("13007388121665021687576924354791407328077988205786658798954918789647145039714552308710813956738734373905376414108898595332508608629238860890779726686999654");
    a2 = BigNum::from_str("-2897208443934541763460048419134783149240283139964797459524209408090495162493747067978417045194473819669908462755235235492154744325438557736498750079065740");
    if((a1 - a2).to_str() != "15904596565599563451036972773926190477318271345751456258479128197737640202208299376689231001933208193575284876864133830824663352954677418627278476766065394")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-8900480223457168683829269713370006619275680139395431130002737730155046645436518843199861253789915685522452321316236136684074516458623908715425466219864499");
    a2 = BigNum::from_str("10438528055702490264433873850976587633254953702179164545794615607008659389770390373214284335464843750639747726130105173246722089144044974300034160086469075");
    if((a1 - a2).to_str() != "-19339008279159658948263143564346594252530633841574595675797353337163706035206909216414145589254759436162200047446341309930796605602668883015459626306333574")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("6947602532006050495271797465945098277838752482452404622180411598343786561100335534752945703797948133655105632493401208037848223558588579709217721450332929");
    a2 = BigNum::from_str("-3363819093978415015312836486788502137105309930910821152526924754837130119001760481669940333973390874750132910090489592605336615623458271844077165253045228");
    if((a1 - a2).to_str() != "10311421625984465510584633952733600414944062413363225774707336353180916680102096016422886037771339008405238542583890800643184839182046851553294886703378157")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("7488758457595897361750229445177435305482450412976356119496313422333308030640581694575000933601166556203748103911910090389957779361458822588853350635466668");
    a2 = BigNum::from_str("-4884825855030704389270812674472394571125558233969281370538033976386888434036579421325412183831670738339552435004749127661787138285146015584962499453528921");
    if((a1 - a2).to_str() != "12373584312626601751021042119649829876608008646945637490034347398720196464677161115900413117432837294543300538916659218051744917646604838173815850088995589")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-2849316239275433095181794848991520340940211179881098904678786063666544018907925611196154426805068660562146630323926545828841253986733549118178619224827653");
    a2 = BigNum::from_str("12929150289371365563086250833937620585058311526825794940532186199665307967121064064978429317814669321562356406814870147209861657468568085034398514938474615");
    if((a1 - a2).to_str() != "-15778466528646798658268045682929140925998522706706893845210972263331851986028989676174583744619737982124503037138796693038702911455301634152577134163302268")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-10402704556988934519525583337364497125755627720154284704954275902215190667094396524832771965238905240727531934316726557909304393834306295729070242436048394");
    a2 = BigNum::from_str("12515517283288016717514504369493812759279526835455729953851505764663854500966380775191051795785780794827733131206331462732130725320290807579730993248972272");
    if((a1 - a2).to_str() != "-22918221840276951237040087706858309885035154555610014658805781666879045168060777300023823761024686035555265065523058020641435119154597103308801235685020666")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("11614943157042710112154338522882214956402688820181728621843338103904995313978608020945290139160900407165196172323817773026544731592811077115581941117497428");
    a2 = BigNum::from_str("-5202045545560247756408824511160251333873006107082222784809884603983630984422294222192924984524290493310328575506385005996349427606536770103221308749042052");
    if((a1 - a2).to_str() != "16816988702602957868563163034042466290275694927263951406653222707888626298400902243138215123685190900475524747830202779022894159199347847218803249866539480")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-9656238773278519789997945877091040707885948039212385751319815709846119870439099129575786976974600213870813079243958643777503205028576913680351750635082632");
    a2 = BigNum::from_str("-12193672116892155447872613944816784743255271352940021872985805419861902341726034145624217708543903353410777319901871945067657017808134149702622129194020126");
    if((a1 - a2).to_str() != "2537433343613635657874668067725744035369323313727636121665989710015782471286935016048430731569303139539964240657913301290153812779557236022270378558937494")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("5087426866551413826351048921421609354369359924129053054717216461103101585038351485836743006357491318645084179165593647118089672630107608387977757812919323");
    a2 = BigNum::from_str("-2682247156107905317039855345016603121401304595132550849628790028335956564896328874301262957549200537333747300530242614033256751731998457935573352041529980");
    if((a1 - a2).to_str() != "7769674022659319143390904266438212475770664519261603904346006489439058149934680360138005963906691855978831479695836261151346424362106066323551109854449303")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-11376953881139713323493164812267011145044575891376304784649105166946496262187652337087821232583783280028716926692594815706313927351503329392619360387472486");
    a2 = BigNum::from_str("4075418476163377722810646868693918415077957054729833969627174400584694736426242183611532118006702994722112097567310573456654578239826488274799532717995929");
    if((a1 - a2).to_str() != "-15452372357303091046303811680960929560122532946106138754276279567531190998613894520699353350590486274750829024259905389162968505591329817667418893105468415")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-4030536120096440587563517373259809932738704026566771714087807651162252265473373297787006618719414924065537424175139624482058756831998970376134314128763088");
    a2 = BigNum::from_str("-7324119741899963355429083621894499335588475036947898592791006136800409500688514551356146403899765002384807783565381667479045941713444097140930852992366100");
    if((a1 - a2).to_str() != "3293583621803522767865566248634689402849771010381126878703198485638157235215141253569139785180350078319270359390242042996987184881445126764796538863603012")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("2497448004877416444045233033468227822051879746956639567407692985027303079019561792523733066521529991161675130094723549010919030753517046036220014846227909");
    a2 = BigNum::from_str("-8060318059534240135906919134435381020845836766544850955605974291198060950120797150441020551526558140164601251448673396572977323755406618880511135694958631");
    if((a1 - a2).to_str() != "10557766064411656579952152167903608842897716513501490523013667276225364029140358942964753618048088131326276381543396945583896354508923664916731150541186540")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("8574399509641295398184313615644986026271892377710489512008920623642705106307265938511572569757270295424865465234133452660414268346381275628659142719451223");
    a2 = BigNum::from_str("8866495820343768143623571159569518292211791807222920187788546009192859543801660403731558986621668172323946681732756737324876079418667537320795102260894263");
    if((a1 - a2).to_str() != "-292096310702472745439257543924532265939899429512430675779625385550154437494394465219986416864397876899081216498623284664461811072286261692135959541443040")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("2273178160887482060914552111401282699054571356407603743417648655525881684108494059449089440229208944975257733494894096203570096412610595533245156253503523");
    a2 = BigNum::from_str("-604359873868734366909249366234505259812432275622180807419240427841277448686227700659463016343371561687252896335373919718065745048430614075578897099732829");
    if((a1 - a2).to_str() != "2877538034756216427823801477635787958867003632029784550836889083367159132794721760108552456572580506662510629830268015921635841461041209608824053353236352")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-2309671388619516649206851354211297667786403312711156940445394683336947320193902850473223216207186128254865224580536832642920364854502336758889286484586489");
    a2 = BigNum::from_str("-10726128540734221938775297940965142565053999509710343122800480697423386652812293468915903857712862277609286619978282456513720951277343637801969635072860262");
    if((a1 - a2).to_str() != "8416457152114705289568446586753844897267596196999186182355086014086439332618390618442680641505676149354421395397745623870800586422841301043080348588273773")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-5173492454893009825975004593665306699221323245983660530756451127758966946198417643027988715055925277715678969022644458183804069832241472589301246082737936");
    a2 = BigNum::from_str("7834968241060671610615758118441853172371332274202892680781105275078652083661885339084429729675640569381838211524214273465914552512543417081878254511170432");
    if((a1 - a2).to_str() != "-13008460695953681436590762712107159871592655520186553211537556402837619029860302982112418444731565847097517180546858731649718622344784889671179500593908368")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-9260395352535987742239295486064091205708343976684687757923812229016197992679968227047154657331575312785043936725319592576015209577225173869786268530705451");
    a2 = BigNum::from_str("-9368774417177086889668857898385886967314919876272700263441853318115404986271322689899248914057097285094577724877062988473307076432603854375527947539985045");
    if((a1 - a2).to_str() != "108379064641099147429562412321795761606575899588012505518041089099206993591354462852094256725521972309533788151743395897291866855378680505741679009279594")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-11215994295279890375846680981482457536853582637918042100413024192338203934100772405739214604425008595525620378900844693385659195683409022456621576089106983");
    a2 = BigNum::from_str("3710117685080100019217097443087621596907910697100075456918000530899303888661246615953196836266775847844630103984233944889447054233360801840322523176541427");
    if((a1 - a2).to_str() != "-14926111980359990395063778424570079133761493335018117557331024723237507822762019021692411440691784443370250482885078638275106249916769824296944099265648410")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-9758966400607059797937177722987736871864178423529821596235850868224697584942453750972189382731607751330461861024981221301668100900290689155973949075384772");
    a2 = BigNum::from_str("4351176418623843656795706866798182646524238283315224516364884873486279818420980949710204616051671277209223210999723636851666917255290679005838288813170843");
    if((a1 - a2).to_str() != "-14110142819230903454732884589785919518388416706845046112600735741710977403363434700682393998783279028539685072024704858153335018155581368161812237888555615")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-13059260875753902443135064765804114071597729821911106717664852095125593449068413177777601173849037566162093872996223019942804966544138741369159836237417281");
    a2 = BigNum::from_str("-2975088360973224965944772788761908578374360886725260574517693414444722307824582158342859973845494301298170950440738375598790556054639258060750686806236554");
    if((a1 - a2).to_str() != "-10084172514780677477190291977042205493223368935185846143147158680680871141243831019434741200003543264863922922555484644344014410489499483308409149431180727")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-362713047914782727809275259062491713760021943504996818510318748915235624503306189215143739356856197502300536158163136973136522325463211931939813400467968");
    a2 = BigNum::from_str("-712194571768627456857557434396740620407746771167913615996242010967091386902369402118611173454720640653072788339411673990621522102405649267680379773626302");
    if((a1 - a2).to_str() != "349481523853844729048282175334248906647724827662916797485923262051855762399063212903467434097864443150772252181248537017484999776942437335740566373158334")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-3275223756115909775919667126745222730013500351990710898532311983538169829542547714231600005386725381804817115775655193759025340629962059578975180355840152");
    a2 = BigNum::from_str("3628092957427758825002076100668803573875135089343599605055244740674085247514260207096282582641777679422606756382234285736538578591769764734208333693645508");
    if((a1 - a2).to_str() != "-6903316713543668600921743227414026303888635441334310503587556724212255077056807921327882588028503061227423872157889479495563919221731824313183514049485660")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-4049610484131773409858554034702181136779573138494969105516423506675497886633235122640550986113551795698457480561784998738142458786269818787361141273811393");
    a2 = BigNum::from_str("-13080890323086992128316684405537043602817844695791776301351332165893559560411887754918253379813221244329167409460561041803930285300561708051863427172233298");
    if((a1 - a2).to_str() != "9031279838955218718458130370834862466038271557296807195834908659218061673778652632277702393699669448630709928898776043065787826514291889264502285898421905")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-6666763424233876242417122860671124203706308431213271772367516941217233308033977030598594589161388370972524474743280362297723441062800494018560552232461100");
    a2 = BigNum::from_str("10183043429833151371086847939638125447041938226890532732421731001105839454601513521780110755086149323433105421718320064649643383832074595855466538956558126");
    if((a1 - a2).to_str() != "-16849806854067027613503970800309249650748246658103804504789247942323072762635490552378705344247537694405629896461600426947366824894875089874027091189019226")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-5084990791002470397298590762946888915640209139718489195903917618717377357232200459760057705880686390202927421727620255946484900360118697579936463402675334");
    a2 = BigNum::from_str("5097702674801841195345608918809918045795788900147416839919209364567767566857630323049029951478842559039461497940922778608276118210165136118687323253903318");
    if((a1 - a2).to_str() != "-10182693465804311592644199681756806961435998039865906035823126983285144924089830782809087657359528949242388919668543034554761018570283833698623786656578652")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-13320304643487314987631533772816436039905425962552338173459994137373533887772865620426278046760474529237842809883622598333024174918847800807446798064939240");
    a2 = BigNum::from_str("7938809472840358947992347927863829791711518915637752629122512823347734398275708033958023002532805054664775148153953581484802873876739087291765671105859865");
    if((a1 - a2).to_str() != "-21259114116327673935623881700680265831616944878190090802582506960721268286048573654384301049293279583902617958037576179817827048795586888099212469170799105")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-7537156612802312678367306247283734795099666505896971935666777619401271648609691113643815068571502958694894566272571214855964923293520454550784764097712184");
    a2 = BigNum::from_str("-6020217732845329471250462505816625175380951220822158422752162443807708729099052897803630107944547972377363895949887159734939876163125394122997369684621782");
    if((a1 - a2).to_str() != "-1516938879956983207116843741467109619718715285074813512914615175593562919510638215840184960626954986317530670322684055121025047130395060427787394413090402")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-2722957758311409313616446456859723164893565792203561017776294150795273347770335785574966874946773102739264744488005566162044708255748168398445782965463552");
    a2 = BigNum::from_str("8447214113234021299221702987000902176447254962312161123785135456426011862904964408180300523949858517750335259168579705279210335633252447887496111736099435");
    if((a1 - a2).to_str() != "-11170171871545430612838149443860625341340820754515722141561429607221285210675300193755267398896631620489600003656585271441255043889000616285941894701562987")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("11125224556312821949100469310340928455922922561102383223926895789486291940025468126344283420947059109572268479016476508001538608279031380508967982325528348");
    a2 = BigNum::from_str("6047499438910683385210401488046405951225819948624188740679848560911450125922556575812524864133837472604703413211764952001231329966904689707047383822125780");
    if((a1 - a2).to_str() != "5077725117402138563890067822294522504697102612478194483247047228574841814102911550531758556813221636967565065804711556000307278312126690801920598503402568")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-4277727291145191358579141795591479365154083084437182761964090850321937647809341613403807920516753568733241796157982888055887830239485279272771617155022966");
    a2 = BigNum::from_str("12021688734595376934988467246369362061163995634270716269860985319746409326996418259248724795243894358158393770602177198840328440911168090320050846434736487");
    if((a1 - a2).to_str() != "-16299416025740568293567609041960841426318078718707899031825076170068346974805759872652532715760647926891635566760160086896216271150653369592822463589759453")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-5582052112872146065171306283387263274040083072609943457279065098002806424182967090167580421319874163625537149675730603277358540114058768924112454631424508");
    a2 = BigNum::from_str("10727395857635378993220317237535492841170310416494891030283754516970516001398714261370903185808617920914692111214669425693352466956541774187364689758925362");
    if((a1 - a2).to_str() != "-16309447970507525058391623520922756115210393489104834487562819614973322425581681351538483607128492084540229260890400028970711007070600543111477144390349870")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-4008512935274682472186964582505798678484774446505091815402179519135439141781087862530358590911219812137468587958587837702087463084783216164029255029639997");
    a2 = BigNum::from_str("12064784708091488520794403990684917570854353349864506957538991992942778336403927593564009076522356939758985007002670037243067191022543020954586820905954082");
    if((a1 - a2).to_str() != "-16073297643366170992981368573190716249339127796369598772941171512078217478185015456094367667433576751896453594961257874945154654107326237118616075935594079")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-61854794650095894412146293537193001278773229799365800590749355282565926897248541391140026148327356841919668922356217864857703231541026089770123352599262");
    a2 = BigNum::from_str("-13086045884201720605176319633106476986461169775048769728923441401634544870693665368656870137921758482288153599867506541084089050271745694190626538215643536");
    if((a1 - a2).to_str() != "13024191089551624710764173339569283985182396545249403928332692046351978943796416827265730111773431125446233930945150323219231347040204668100856414863044274")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("5671389893819334908970477029253437317736266532639619221993103328762452868652355972273744045294422386275590387731275607005087466743561846491997779935986299");
    a2 = BigNum::from_str("-2702432961666268316422263505884050574658136034192414705553932066367168829646386408177386062756617781583286961006517233148817894518284534865612330756449340");
    if((a1 - a2).to_str() != "8373822855485603225392740535137487892394402566832033927547035395129621698298742380451130108051040167858877348737792840153905361261846381357610110692435639")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("3842389612874949723407740399009604624554292452039119345277014195179168441805415308400660621680954857308660624343561062262907145719625030426169481809015368");
    a2 = BigNum::from_str("3187234394544563749637528763790717786007855967451267503824994825894896655211774624818679806107799782322770451379664948409061163315811064052839100884188794");
    if((a1 - a2).to_str() != "655155218330385973770211635218886838546436484587851841452019369284271786593640683581980815573155074985890172963896113853845982403813966373330380924826574")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_sub");
    }

    a1 = BigNum::from_str("-8931126472880660438586736919994336346154292124946988560414037318936056272777506616116871036898840385796799661786741675161164429417102467039153871439919327");
    a2 = BigNum::from_str("-1872257533180095570529897760098529412405664422809188990417399300891569629252202045157858454978181676169638050028983354133663887181926460610147477021966299");
    if((a1 * a2).to_str() != "16721368818634993033767218069148484278690828556703863454006288195107359751887665806439228588658232349065927496912568198701276712922929117792673621374478449736436166826427650310869092991652520407684240930876625031140214108932905353617433226220195407029021213766511382681269398759538225161253099644807472760773")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-10073327403634959735695121559739507776347338943105003637355375101165132824903522021423235519615032034146811346285413026987656826686679257145132130445155164");
    a2 = BigNum::from_str("426761757279925387661735956042496288971120510147805851591431888045570745489667549841538440069456034160735968193152963331113564012841854205091547776229933");
    if((a1 * a2).to_str() != "-4298910904431283681935609943880344405538575675888345430797634103328301273559084798322057261572843958596756792214282836858643922725119498405038710382114344820563132429348731155537793526231580243839014974088273569638978027228676800005032885823410930176427875951025955283392061629737542092412131388761126324012")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("3344551905591663391706720638881834572893258813350872883996554659098818884080716020035267765590683104943248627980743198256940864524739758253195344006744452");
    a2 = BigNum::from_str("12434638046638190356279512299238736883532019747799885622227782645824732310253283898085508235755979678567881174893199651973239583500876404842791557556003444");
    if((a1 * a2).to_str() != "41588292374226358523166654773774191259099336455187818034073605104214499833943394243868828074888660890700992479289682113199794089161161659349937693613540270937212391994390215379975625394539292137521518650221163033719657319200305813818812304236011505885621772754059521106980525791461857809418474706438539892688")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("9720117536208062258195344824819125240070425212703332857384742892365552333304479170948260420097805108828758200020391010219755826117156564059316516474983225");
    a2 = BigNum::from_str("-7018001425433860167105816018187782106993391999310659053477433148735748123751834207850636691099420947151289775303294503164880399472026462754894537787320548");
    if((a1 * a2).to_str() != "-68215798724492841843051050481032797845217210097909417243741132630585609698404886961814441925562427270205075371581010756853457161345316758801859438774786907568740975185471489364759638615922261474599376758428579731404480108835138637195937168850991612468732174886205446648185692978818663913467975676645997807300")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("12373500122668675475428946302794572079035688226596810206294067426860726232104668166904038527886758551342041587873018886833215431040150813718769616006126659");
    a2 = BigNum::from_str("-12270296656530652267807917143230997248860167183841725917934731208188843357385225417105905461182010457960742636568765313788837799128147166640426123972550507");
    if((a1 * a2).to_str() != "-151826517184763064382920683586582344702151907262369148246252679546902897605809124516579750746404010692793894062821454206106607704411620106140829156731700495596166233524618983332836543122313446153885267764341990570306414066718882127277710006363291342137275518746027127818573362405959735552779933266854316666113")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-12626844273097620159339261208616606339550162031205971258626144219842154431800482128210146359070566843819109489835021313547270045682684167075520508172387953");
    a2 = BigNum::from_str("-7566552131179611356518833251703625308589592727663635791370246390623976393287150774003939241155180062647131545223979587002409438110852318588015669265985262");
    if((a1 * a2).to_str() != "95541675444679868416120171000182016336033387207628055582109367051726605627800534882025220451037268857541967067824963156079872420842869760373016434671992722951365458934714821903294521958017640346353369845007250596913651335963466384276118409848030682166667480011743776324867176428244364365819663441307844348686")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-4688479212548079684291325662984505001074543754647458313938951202910507576634086528216883755857526096785116393598249920314386982341411931991292698677808250");
    a2 = BigNum::from_str("353127604793596875303174664101432274750956386776306087502452864210250806151905710099502102344093916158074685408911533330890706969305654209854223924090199");
    if((a1 * a2).to_str() != "-1655631434451672566716917204468824129688850605378152890993517435218627163913874425248009748515823389502535660335222433758538908538606470557895831951166689038410753796101211422193077530902315186275943475788044108725693424005201504640103440888669599871162003909156343543710758288771274258213835162612626341750")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-12723372006732445867857739481096694402618999125321947454193531672460841011439785876162769740423121111509484940396375054940324197113022829829839512047041208");
    a2 = BigNum::from_str("11764169241250610634489616157818119244844968354509503276527708449893421884259352933128772905048902256235950302011677079992543773577071226590302926142695664");
    if((a1 * a2).to_str() != "-149679901606590896926804208411050495322292367411328383905990647250188824930715541079186641276943656456997924606929425510319680466155324961375737946810708895567526827902782233099948281485857567836834351474462064710250785354602923637675544134285206572089270586008460751779695510689645394589638909963152410922112")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("8040130737453315286963823158290150735073349447991947845409439985124254012526249808662302448737544153260123055809696844764231641162813934194625454552819613");
    a2 = BigNum::from_str("-3090672826142525630261137446742813826638109149668874644437920847872335182223493009204337086012235357454930145433218479718515724840658735809694403533148657");
    if((a1 * a2).to_str() != "-24849413588880226701766957849516990761207889198770451825852057778706858136778629811551898196598764800888620545528619307549258184453533612706315655544213144552875802407528736026626612310250329265721036220723386441901564168407753696721659211148710889866454801068914060726421269926849137269401227576351234209741")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-2786915554397507371178178479180919352599285806533717262724365641982977115183929703245679800163811040104346923268195555533118849851489683293278347939419437");
    a2 = BigNum::from_str("-3764450837027772096894350316470952087075564054036160582293226631594772688094720003589151343629484661464750275208950943713163353679353157311300465280595071");
    if((a1 * a2).to_str() != "10491206591477414142958463257014296541023218050397528354841175975115783671289716771965015766872068237112870799583624588504351441160268086575679056219203319090495227572541397651172604049816116398310486244440468011076334884530587491166489573926946987805291826144044516408745994098668500530623430962305623795027")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-9764010063704407182151070925253959832187674406640188675304372381875918654470579885295539596317246317195853045561323455024149374143461396357109291276673427");
    a2 = BigNum::from_str("10827703481986377995258154146699554253339417387959773167354633801107939375623094010554152117042534577139086704125629210453106661441532707067897070657053713");
    if((a1 * a2).to_str() != "-105721805764922246073535746840605436412625223711803776657961108838316604913277049960376775485263131532640412094560764017773154259351799068691587590242823623049514772879426352639761409841742955104150271650116040939824885744730548017230747835621806841964667723090920392287637185982250874342907820295675498784451")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("12643647294705162246691995083927710477059962135969189031603868273491472240581277181549116071081626580221531311260234838248856856986402787050415807113016843");
    a2 = BigNum::from_str("13354189704348647319798661067610877088098444823840766189561109755228661502552167355719209165613573504337833724757858875897577063892432749620551225092790171");
    if((a1 * a2).to_str() != "168845664528367305132202295368659830610504065770971992110962912059192783672524396773041903144905213072739464301867474248903414300855332375234755266493779054362450535614609266689359223037704182880264410933983973856589353641917244455242725684039361527436979246599616031802798506236009030422390732402524187850153")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("6800330345089866299528204376855328950305708905272512486918540554163175601763742795667086810383549250739362770743745235063117110661408934034755539087824184");
    a2 = BigNum::from_str("-6547660443359803454494882217987617259524693294559943902686760919456828718810120585173790917754104685388845873590789312695897750444652761668036689549695186");
    if((a1 * a2).to_str() != "-44526254002324239199449321760350120324704237403076801632616798419296773315425148487814645503029920010666796416424280034617224425840715701279432320115463584894784672520453577490251108632071887029660905640971506692271723813741941026838874965538342247976079147050065312324336709033713171108848616898561159178224")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-896371862782931085728339149967690192930383498036862174293834036530070057787555017118987807982641123371557061319531969022607103381397514715907273784720675");
    a2 = BigNum::from_str("-2898276360423266993462153372374368781814810073876683438815979993659664664928611267301457650518304729182458482881334708397636642380118744469011495923425843");
    if((a1 * a2).to_str() != "2597933380052337600659779872082937124501060909235024296565693659108807837017254639577698252973993190392957703357704205793659004687986813185949183389990813690888736680392029911240244923413368540740074094273161756643365872372473606511183412014009417933960075420276767030703910432820675619931743646614831404025")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-4440773757050736919617214020217541500810677989267911297149723614363697756262396809841052572668070796042857360598000851131398633257241970145185755150478267");
    a2 = BigNum::from_str("192239725742075632666316236855888565327531040225597609839495158682808119973877299969597427305548042418614650071301032766427202446723991467134274602628490");
    if((a1 * a2).to_str() != "-853693129138040471765960042729874875596006609555569552855988854525304285249213879461650800126130732659222126347494020606290439064819609731262698684471050416013180319833650538346855675529153181957638914826620184855330827738643318711551631385813601467117469909409464113454029765923353582395403665598820026830")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("9133615212917786418113550599692671745812506914693086503926513222078495387840409985475732062486068913290798226998238316820747008898866182950851168410670243");
    a2 = BigNum::from_str("-7584994971496959122944697863368773390297093610447460529538222020863441985211041768317062280519198062104945024749402165642625312241122874212691229313766032");
    if((a1 * a2).to_str() != "-69278425461569537623369357578628141411486597229102300768247011029759695072241388287692203156837117430299997534007731460977417959616783176575365300407792654046463514952620443486725808408426484237571622511357777719159090548882944217612188124790918573132679822463285025245067926850950387264434832178395606585776")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("8441862045948061748881109728505176528137606371868330501097653474298469694895702988174044093262798619869555392452674401694952361451944962358335873319502574");
    a2 = BigNum::from_str("11491325197729474361751507713665547856844081289410493324102302599486408076237572491901014784497803476390983966189661711484226293291413322967202617055578738");
    if((a1 * a2).to_str() != "97008182044359055656191622209177346161031399583437431482706061770074804929897508171392408960104316507029641498059960223849084579511939572197845268108635130689408152407909189672171720685860156318052038611961494576949172670497964381530724735157352504332750723323661939933661800353491569828006330261981850671612")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-7057836210199489691568125469034893880547576845722451398885031590361484774095224184069295846625227773823722611875413380061701390736636275767467374107426418");
    a2 = BigNum::from_str("-9309027533573325089018740864668498034298876390099250981581793844522919873658632834929533595179345664772025774166412147222005563697131707771760143484121767");
    if((a1 * a2).to_str() != "65701591608197859534849673024885017837949073652616967453432139113138459512387615654122775747873898091888946519808750718477300164100700110367627306952897930264853926398589029164801015552284634766396477150371923837412213937755902654346828847641975326676352718163980249766269822546955007063021985395099304640606")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-2168170390049210667509973800543450897024729480070444987107181215601994855445734498434787839009438894070888793025571036813795296144212262720102616736508142");
    a2 = BigNum::from_str("8559395112108723880590957927068832375563993194392167835816431827922207102301658908844424875982376816654272283674562705862075819239520575537217444741743296");
    if((a1 * a2).to_str() != "-18558227038806079125531688013564254124531492195335160162839647942818879059516484107320124050884803239338157835403852230691375065038467853563032779070757734583515921794957421296745345920181362768695613999971861748080468425358726724085471502505360036182098322603911760201144937805461918547015926791360777916032")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("6407735575205889852657850374600967041871177451303403811798370606802736338678334672618876313636373534438871905060157231426886271780151680756119815776096397");
    a2 = BigNum::from_str("-12569703892115655251348242080406128394784565154979595409997032499312682358542707752721508861231003841444709536794872973085604243646251681871722738523443216");
    if((a1 * a2).to_str() != "-80543338799313420650800198132964988949269568702951699152511233277211120796553356372823666445631533186488694781710074259046263863989897985122496186990625683749008906140438201206756493325490429143947871545332940577704675881945103816492442461525976232067642188031350322959828713804403986476371195942419971692752")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("4428712099553300173418816427754004922909038088940568018451758257192236336103829716734953833629241651877903752936227517859315842449635351002840968572841745");
    a2 = BigNum::from_str("-7336679650915221719385236853876631876336335192214273466614817113913892707948269000855884850630328475237403167493540652908504069837427975386506574868925426");
    if((a1 * a2).to_str() != "-32492041940554724975078675045385156664018077362777282676492819694610316876263607895027957611228236308610878243152713126068449704179611214000540365330900740066166877125031385517985684704488581142945582819258939446058998366676552969666245474153994880854762634337888345129873319047715455550223131540755304708370")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-1011564969910341106396854161949219663074396338890917593338396791180483133870480431407835841295836862099398348804338424743267662948425594736130868752325150");
    a2 = BigNum::from_str("-6414312168666862384127003938130151226621783765702925849263644245004535477566701291320225530544256551052842835618771430526945815997221557692754932751295181");
    if((a1 * a2).to_str() != "6488493495893029455325695359230447348577875587959139491637079336258043664665306950241074618992464534599966014055054700797428483673742357296895282707101078009155317417979000612935547707140107409245700343424986220799614478876998116592200902081119826132995385155249459615588159475882241190572409105167740102150")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-6732777863161074385372737325674949374406507258653515335363904204694183886758747575028635987723218806988704494790074871913251112826239180265615210870683215");
    a2 = BigNum::from_str("7597573987255694179091135006852459883615475609505040856582690187571426657942186413391111368672934227142543205176109110653718149384132044980747835476824475");
    if((a1 * a2).to_str() != "-51152777955123556450003859420953028990720445681140124102769594205625381522272709128939664121579660983503522685558642696450406482319896768995458853035791813296228385616051522442694362567787067826645169039103663233328402641164499805776316789891909568549527379676620956934608198629704413514821557517341883687125")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-3332419198268568579721271990613947374106286054096861360565797455595891547746637710976167498612385776527212530693060161834769753065990007302502978871591643");
    a2 = BigNum::from_str("9324193123665767894943189741178187105126349556142500108527731952652156077583490261040717158997209879225860037591466513544258602398718447065990066687417499");
    if((a1 * a2).to_str() != "-31072120173667578372790498502522843990872967522280531196382195835504657623576497088521178274206660160891502596606961338752958243850813799339903295824561298690777058643707932150635037605500792065949878807268701403643987604266014869118912662642343185925487599570151660432568913321004634949693222577807380360857")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-10706706734480872499138523179108582251880520627873451507381273992432934699876408804261782565526750596662883287322730182040058735257369257605723571369440274");
    a2 = BigNum::from_str("9337122095870819200740898753441367394276150202424592573362445739286306681416091370206285512654655577437581402654677300120874511040711730681136866920338518");
    if((a1 * a2).to_str() != "-99969828024530258767672004719365366981811714031819093335220575269907628054679817386407653149048256845936964123847411359902474124550344067612684293398768318638240235879223527963093749937788128749629861898010101327913087397230524981603432731135295407808810896095751151725630525715184874733756398359176262673932")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-3818180895763066095599014970127992826824726161824225248854686915011074608495685253574161939128418634295884441021086785335298147003725223107964641898112893");
    a2 = BigNum::from_str("-11504261642424057785058897197371533387065144518735757688840562877992433768645778262852050939165285536906015930902564978952153300173370212365349677674926037");
    if((a1 * a2).to_str() != "43925352022963370937521934780953535694291959115872395705074814786568744507790425290016494302461731618906682518578095660953630291163011178727560222533554406877005458446531921013932758649897332080828652881789400777192141958886963144559957909996646733050957340203280464574960326792321773438927259503053651095041")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-5319264445330123940635933650705882068898384429538241599399144881265168014696599690021979625468871844007600642494530645445577308296808476646917401878489827");
    a2 = BigNum::from_str("13275298548446867038851866966046876189229248070976956941242379439173251613920320174493751410434652603865976292218803795197216386375005529411875327289947116");
    if((a1 * a2).to_str() != "-70614823569896023681338939272009395307574625986247802058798600378859027840439838885261174347706219746769923096208383428214961401935256141681403265481742305675927690310212073250377484543343669281609907077872944755170721052295877640482286174090073786477674509900807831231726200477351544073945726679536773988932")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-3884770580266875336866459915105118092166885193191152615327274455279107236672806029577212603553900433474946349169079039704034193302224195172725543397848589");
    a2 = BigNum::from_str("-11997584654749556831931098941142057192743222603089155606622243813259272271971742573231802486465055273985433624712485012813417341076164609357324099471598028");
    if((a1 * a2).to_str() != "46607863901032395095044095910411291510213452059268119628802906556922452278254775438935495725162186017032099585122535413696062575878300373107297600917819110444440465654050041659346936444347538075438015190509561158535501782748102316847881068879020545739613196803339084441825304185560848652832254500125014982492")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("5888053528920610127621772575753749981801842221189022069719024537284446883127731633823832173571182676414187409979560613736039971957740305700877252254616937");
    a2 = BigNum::from_str("-13345331588142128113773559824469040705507864100081265977070214901347674821682449218963595608208528188307337644037289891768553538444362509973008034559538222");
    if((a1 * a2).to_str() != "-78578026752175947822246791770302357117070287990866761063200578739120681685574820081660208688180436259756648036073774811926273170297014442029418013319439227181466096197686498283505622528483357975194776917336344226282176679309827831636842808637174838368900885958554174265619241694032040407147860265710220066014")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-13135822532669232770002182502574843454340835806866972874812733135706109354393943972583557403866237534651262231253027119731781379584053674773052649062846547");
    a2 = BigNum::from_str("-7983522095131752543114987923760041325127793206648557297451582971011505313536774731814927441499319445391121068266498180705851328631826939486849096696392039");
    if((a1 * a2).to_str() != "104870129427294357170596810162747381455760062013926017175977307584797633012449455559182512706848211363990630808323591800892371358198845457075815880354526775995737402331210128595287650734361259935776620609124903387726105885531233409155917831631488727025763294695151845713781212894766235030718128898658009439333")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-4348416272913922432460244981637981007952332056907251226046879483640359006282998513059258065800689701989723020838078263186797624326994475375725021046842608");
    a2 = BigNum::from_str("-2789495923248730674210752483825310119708989940696477434361698283890720696303407726562139011598221940014719628523146250055285396258119214653337767587971486");
    if((a1 * a2).to_str() != "12129889465881826466596983636692920848775899114808031649528850570762885458068080278044784775472827821766587757348199533588070048472585923689434214080680345282882262608245558448717981529898585693219968543301120585906261698319932794062481882008580419726682917721413806371468365822602015897712863469659833875488")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-1622281584934770108585301651554497443150243055795718919388137548292742921680812879102461578747507032819441760958182308003556556657503746364545158374120346");
    a2 = BigNum::from_str("-1151839424147653770778994724799045045825462310833538514214659804198597860363392015015446070221135609184768739371099595192229127459323954583919493326716119");
    if((a1 * a2).to_str() != "1868607886596608672726254116611530057083760714695822671665065687521033644001785593311652406624033519341493734601210882883696861488494560618257926263814557515547731109833406241424732624181557997563878106495421985027359630014137750588445759814898196347725403735828703829769671404148890173694101537527484057174")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("2269282430147233763476522520021652979715397235058644987824245147885723779725658297719285587098199778572192556898425328554217513081112381034173889759799226");
    a2 = BigNum::from_str("5299102198400916992774446325084565838404337519165197286866673426171258077334674191399965156543071498873928313120495124722918281233008432257182845376848546");
    if((a1 * a2).to_str() != "12025159514385781787308769123423585352072397194329418985475025697260617415565799517340047586500340459050630756894347181482059615560954541513387746581049953245330177153225355031446429118675281347134307707478206344618225257884870425986144440926797455747840772893802831025329724768244333541570238622597570025396")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("9521694468289307597872589653590645686286369812491834267526674097234941784072172496200871964570306655887807787214212405914443797372962433550816501810304041");
    a2 = BigNum::from_str("10492712606030795109162786454283890636877706905743512164244265286692908230055358251943239998590677673323101820417251729230889022788784969158675818920913682");
    if((a1 * a2).to_str() != "99908403578192906707774969392374107459401637201462610034807895145470771903381665853600006522134824748122331610854746288262019046497309161470914374101746600675825529591625779562449887394346412233539792837179250297010157485649717985858950605065844046227493996833352137854652502010233782370962322867297936788962")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("9050287592389321453800292168739184658086530348810684157450388252663629564719244550404948752479416268661505461224446947368313276715333487971242546334002215");
    a2 = BigNum::from_str("-1621988041459622136609959474491746889069729730555626804282143199733255762445303726794311773254575456631955776442072809544261393596338059836096295293726033");
    if((a1 * a2).to_str() != "-14679458246625874534317393834040194853447767177688612059316081864526077254370073272779672086251817969761652932939683653697250378916248072271721937388842788911381880882589667780555546083637158273983019663104024135218338572087722878001161639801458629779709859356786890808199353031076824872060698798588625163095")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-7443872503175052830853034116618749175902050258292363799022060878050223539130204561403746447980337684362316473510668684187461327404211362533222657309964017");
    a2 = BigNum::from_str("-9832704773886353405925581263401239785648619098874371464765520632345453743614274018962665892539314051846868203855100943427066250640932490801798976629827156");
    if((a1 * a2).to_str() != "73193400698170701370920780523777004203870386149501233083655792692334825174019256106080228578452166889936502633709061256591662461867189748747042763171923548361915254820246656154162928279640134670145157098206610307331372535470132356025757388154215087111201462455528352228904114900186724524975195743839289445652")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("7868573898372863789927785968942258493955110957445712091803564034514159380439577498405683291845197456159037915330848332640127221452958043820532472653885928");
    a2 = BigNum::from_str("-9241805983639295344379948961578674965667778635146159967542734817386682242370060477631988637587119514981362900990051708533182727381187502967919171742243940");
    if((a1 * a2).to_str() != "-72719833336690309198738024984352880315213108832898943477973562743853500304873626565133878440652443140874767478983135687941671196397790876647186008283288707614360029596172741719435039207444929621619882323156836409422707977938730495513415271641886226684912860704596934491356023831310297045968758888235509276320")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("3042502046989071501367409040973236775303154997635520898983705465659776224874442235046953423627232878455808158750517735339231876411463386457044093042903854");
    a2 = BigNum::from_str("13013913540832143647219599929619672432643372533395338178305986548631641833693325848905482731975278428497148032162342759485562015817022918349332526144697548");
    if((a1 * a2).to_str() != "39594858587320592593728037596718171504296273000860636087192908139130744740563238217072027296769416195998630092577087400261670124378373531930407448844742121107745122254772570607320185348896510262732674529151064881935945863977226816164433919866869668142737425116268765785030219813810616693289284147250473549992")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("6223344903699517437805485779149956634630854597639834573150740132951790179554378495871342760571495205871909530145897626922431533888517429722646459382341989");
    a2 = BigNum::from_str("9998505845811407767742409509612025459503259906434295435063948438237624292368337445890728179706724445560570624010607475396238807441554608532647200424932841");
    if((a1 * a2).to_str() != "62224150400140257621779499457184587688135527249600442392543724765515242962238358229374489640029544436083891842356022197414572142943708265083367902944107219179405898508069496720602641041851138067907268477373062938107930515684141081960347391278663392007518518607844241282467098724963944815503907210486619360749")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("2521320498905561799420065458047433407273095059247881275832817783428288662157365885806525787951947799736584639678279701210349348885609327794357256869361662");
    a2 = BigNum::from_str("224959562085742420025511060145696657475519988840915676264878505384386583703436477348515265993606206290914936846737235665767001568313617107015904770588299");
    if((a1 * a2).to_str() != "567195155311600782997561558489668693969482557531736517378101053194569586781703306119889546518048102342138136344319973878229190957914688840942605228181791296412681737551815322781158212108182854535417772882196537619286629934803320814053898396869997663500016471305781852158094005390038773582531139916336392938")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-12619681060781417510686468363010251341580595647267054094893282114066853550618470744912509536064795650011512052715345369179364743188916376446748493895792210");
    a2 = BigNum::from_str("-7452000175006335461956451849233456972612610267568164833375099727891154107561059268027688150007069313239958497644795629300240449296549337800871125066484739");
    if((a1 * a2).to_str() != "94041865473467260435646763198768848426517942632277111972976785069253395287804610571877532560917984552303841542128988858927898657869289398830838250552482218230812490869230114451633204804311289496835661706702805121741834401183813096189660063541111901601153222273724909114439084196118844531331004241088280083190")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-10352479945308871347845825635261241018535088825394536667109836643550680767786875257549384258438159398598304807926813171450184102601003874460483466904531632");
    a2 = BigNum::from_str("9253157113335052426212661411894026979978021312259667412920294373015733863176779491179667311081306269131139526819305217808172494466001664434356599608553104");
    if((a1 * a2).to_str() != "-95793123446593257417315156370466913489370478536138925274313708299694172038518458860394523468198186804509623470630833873237296945328731214373027287757626070788213431568751122551610970916456980594265269266305088673532745724531376945528679030816398225103861355914225545891144663104817551970604488873564319785728")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("6375763096677971243766466065797907910474054803919002972831339253838938210010996639804797168564824629340444580214810543414411549626962219102328647757683926");
    a2 = BigNum::from_str("-6398847465416721505103952876141685345349685724688591792269761677452226100586235183827601811703503200303812501007544127151039361842647528992820810758929687");
    if((a1 * a2).to_str() != "-40797535531275303808351832025686243195566507009006182732467730863550214985229316275870662693458602296558626591624606865169679807332523012635582528547581915466992262382227412197508237103825736021784251657609728149097338954187652693850744050536340621262522064656706260683975955753193906379068749172373804111162")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("740146714779283173693406542610595347540887557522376459827904208646633776729392742634388532309170155407541165629929783017871372541042347816039299324256644");
    a2 = BigNum::from_str("4715882331827659177200404808172262832951484169548378029274741151951048261619933894099188002535745663359052050319435795435397412447532032817655357256748854");
    if((a1 * a2).to_str() != "3490444815187907304628144134080810898931647955127162009650500511859917297369861840419646588264846891648570417700319851340062369908493338037495370304069116107784753445306184963796676529376022952861122320035328724688253854637333276475702019999326059945195626354946577842615914807605161063025929907775748885976")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("5970754997703879646939031914472005467901743672954823199193024869081356200621784239046375936741886933341708188751442807898373152959179937366852339044720747");
    a2 = BigNum::from_str("-4685303085681735778714624421952612095977435748355728500270867252323270940778647575647055426044557995752366223161135518016084922907659754372491186962935583");
    if((a1 * a2).to_str() != "-27974796814591632534146046979368294360754242678362641014798053608175450165318359480216309906932213157736181817258279479982738599588407190843325883406724015132617602533267841006366825979125344004896315077758392542940737625188307992044896559964449035595364359735428515477736792413215268611818061777777584640501")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-955474574173721751727728787355256468749973721154271487126167259090406505900683465355697871546706899671953133276805309797415293007450412962076577837011992");
    a2 = BigNum::from_str("-10112402236363691845070323572062593965361772632215644399784516297357915405643392545929853927046759226025122830987936053522471306113674360095967434700880537");
    if((a1 * a2).to_str() != "9662143220662990005412344051926235665789019733044941771232872939346919208431569302495895628536654927202906122107224328478129674633515062617374914841616926902755970628116673617160301154190305414450408120587256966276907882369855223520039097426572175910036241105024387408596643799093427176423608995791428399704")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("1572311345833160679276353596217851300466293862759316601985236803155409744357129028575608095886502855468643288788591124887026261782341114203568444279254779");
    a2 = BigNum::from_str("10754924656644089298944533717956652314083912338390281898399883468523520779903478797780749219435150161650841121613143066952627454285024622742895099242238197");
    if((a1 * a2).to_str() != "16910090061222311564419180298039170040221162336629308074469448519683427639404324344117955566862911440987800532998183822929674626572069694011527895519945655183591546767197215238924533622450953718092458402161852531473321226024521854629588144526515378128045332820528355857974851759925335925011599729763168593463")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-1506264108781269163940584860505431050096865744079337486648993634193377592427309558552801259117937362606199499230208955575719011975975753616967566717315068");
    a2 = BigNum::from_str("-454358585659430101941760094076187158514598029568373050356710677871648765331566206352480318424785370778415242562596787962326011433207381303973732605194421");
    if((a1 * a2).to_str() != "684384030095419426637023901766627724991798233095415650235594108861811740839174135311354890404932926463941368106711350616082905969246553098130104544095272896375529082746321702908212889746821943593768209304421265417744082671470709205339705511658467842951460081133295196520038139417858397500555058139252835628")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("12373627133379945642114411178339938183934003993190604745004459538878437692016927827269203231910065260786353730019280497094971858230264620905819086319366470");
    a2 = BigNum::from_str("10663838339727407467991513251919483024027381961873424171846085773507886873476418885472393538591050100815997367000267378835936533415450953993684187803980158");
    if((a1 * a2).to_str() != "131950359426428399775078623633176432156761805615432809691818519431656183031225974416007515399294195028412094819692886079894900994211874337569033800156653995387944617455236830415112311628119573659130638659628868273707261558826918717346733125050399998849140791823896142714634550402364973758935235469783010502260")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-4800077856224107570834724947631178548417610518256348951541179433782752138303936881941007384176968718988753334615914276813278037875914220566600590365128552");
    a2 = BigNum::from_str("-949247232134033752952776231661769096328093541986463990997722184956688601804251886901429927846716153137698281914894106240852677654760870843189061239182599");
    if((a1 * a2).to_str() != "4556460619048600532820340368127133438498600083278369580395740881359408113852149192319581018831472625750296321129143829126951371661420952017862197625808177959576443020874433075319417824788118788085517846152733932726733902978351989508353781513484188976999078989392817815251653199334897557412703635478036466648")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-8062227261766062383753144309098582283001718902493045707689512932071367365999175420704207422659901624105204967708714505523269530795653505698214111500239513");
    a2 = BigNum::from_str("-4322286142747828432961657024360715672029760174153121585837128615304023458723705856483577003629428789480973058768018188226697417826528463372802858636863860");
    if((a1 * a2).to_str() != "34847253173215220666550967057669055158350960990397215093871428319627520818596375447017410431047620959116966523266667581155946413734391175964385050501247435002608355009151398632167559242237685786769658547853920712771135258261971311064933718309127114398941633806188286102782006563778936475111287441081173700180")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("7265054576754241962019682131865473128885836901212374248297004413280160188370615709074279724727316671611843852697548264991522042343521733206062566689400534");
    a2 = BigNum::from_str("12481350204600755000718777727049245295397299238095141083638595168881900768519148121631858478836753907508394789552737580342041032937922716335900764803575467");
    if((a1 * a2).to_str() != "90677690428007209437999673874035542910682891897191501216548065204193171201537706737195396985430593397868932705231241701104265310872998888078952029715402749213810580834270308742061228607236698250567294212760038518263990628190992046217539849495877388012148328876671136168069177474602029612068331261654059099378")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("1271321449864249955525227449600738842320694526409732261025321202197651291050360771046250945729507323243368186741661080192941329625347724735870099819424440");
    a2 = BigNum::from_str("-9733296170324577713801454399321422531536236241858964681048499571251284720004784742744051466693371076157050333378166647161257279122626395960481252395718264");
    if((a1 * a2).to_str() != "-12374148199215193721740055253547861881029413880744044069074347193528027947415619225783091055658067830197720025138262668985500311686163835416039481345782614135519822347779479501353218608443950918016797086351888968118124895343693755595223123280057782969150898442693016217735672499184864847934480648232875972160")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("3388389162260887561608582659718438726951790859794035012621012961371368982824074974232441995050732857853182254809265374107289522811695098359960442336370629");
    a2 = BigNum::from_str("6000846770141172961001087716024682454258495289270303490759533073481614625763308064133518214958788907654427513652201620316562906096945034885024583931427530");
    if((a1 * a2).to_str() != "20333204160334601952472403814599407205239721719085276441731001459688054688262826934151450501053536512575245129194398914130599752091846698921487899503810861542874116244779677694742690625747925188582634903528288955389753580017253826100533755424569976886862862489230439373682306786159018773353367245831134016370")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("3279957960133127372716251976862398442054001020761701381019817971727455999868604117462564735321905887500751184528319729644073781691532944804953730417871165");
    a2 = BigNum::from_str("8207590734889780206907369854814293339966756191798697788634050544498907201818786876812706584943751492529554091320370876590785991544987715986055874173579545");
    if((a1 * a2).to_str() != "26920552564416639303162402975707690836591288804367557383907799157698555248873813174311751799931678020959695486764550671022771577772358992549741004814903676990326484804399557485893582378660121900304915729558404207315006689715123042139306181750937794746317905615171969203309807899145466246294095459946689319925")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-2734959934883985993684016827892168974894056108192998905105777219650174515656284677243828568261793266699940339665035789794005330923080471056655873361411868");
    a2 = BigNum::from_str("-9787841319581369830942165252171972002486424223658811117912537065575953156417145590860842051709153699737134939184475304463289676093688320897457263226940495");
    if((a1 * a2).to_str() != "26769353858057050775374791161534951897172637153702162012166206686349590923174645794617792913988391729925397330056187356348389693840062887801391155286815442373129609830194545380083167415267526996414903442243032107190045631594847884016173079622776746520659476403658415924701737217985807219721816293407222794660")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("7257559746548845104648369252898963660281895813544288083607232229576542905675095538070431075328577230998063504922708196508582199782696686179180177994625699");
    a2 = BigNum::from_str("-6300231803169069960604045903405785997905522218509414087041215063993120607794868635580045974432590823956679809995538649377271162182443940415057599209312359");
    if((a1 * a2).to_str() != "-45724308728606688761657041712716060800858871345202224607842107353752069578327092582159569347513457986492724636822673118093206446710320421506264496213691206953377759827790069665014823209405769180520999822670250043769057389828410836675039121893672365933447972404137869804408152745588583302937272731695379713941")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-4278261188848197868796274150311023377842687519843848594892441741052553840945881961730126291769016067894717020789657334535538699778222794882048297722859953");
    a2 = BigNum::from_str("-3000033449837489416000341790069777200810733146735757621608407239395231810165294669653540144840786094104022938685249533998455293350768631312341809240504095");
    if((a1 * a2).to_str() != "12834926673686097854304741030488021663713505713722985789281089592340006044463102660114023751455389344892213530127756651801667231768557826864230289307262676861913916954143162092696124328423295766613661768249632543736469828556629277399544877844995401856629148659362015271190924842313046140658963801970808007535")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("9993149934268150111332689703906717053651571799861222943325102405517450143939214862157995140855855174140490677042306353246110952455551929237411626754376172");
    a2 = BigNum::from_str("4611412462459803180250684377016509587582982205301339159783544438416392303855598087911328015174332827425483674824071683566257500407042181470870796904092181");
    if((a1 * a2).to_str() != "46082536146113510393584665688187234816197936578733891852263856475515842115449926527075044454349698039035960671419269926987302890172475028588743163097535915115896051155767173443947622197037678212478571901489248472883790001718663994902894800069842802391482335710133011054108878032163277808281020194816637911132")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-12519972507689987398539720687453901422305796672600322944523432196234931048430608502134956396075837944740909725437739112774769102117058401271478359071879515");
    a2 = BigNum::from_str("9831572082678209775222686383839664915248494297016011972855435391726334181480567109612506964401407480967727510353207666745553639560587164665117325781055485");
    if((a1 * a2).to_str() != "-123091012182503578158649565005675588815202100203623552202690095717819148692201295344887322669706682659968101510702918071432125607174676257856485714098257777227364311790481786814965767274515720743483883164740313575001559194765738416903767486189914753145792081965135157819169916799555823242592150988379449889775")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-12565749612811599021752342736112538900212545136170652398989438438221905369638636844690697725857457872179320047421910432983158521509067225500467246890184283");
    a2 = BigNum::from_str("9101290342071848620082531783187408614080845715775671776820444531541400721567566001679596962936050510066532564349883758451616298271352437931462729170844133");
    if((a1 * a2).to_str() != "-114364535591975277412234366292392991355130670947680075557459753792104057372344605381025087101233170026191764675945007236780129432789468218401401275824453416595847884255619974821588417140508961449526942193907870288577249668605098251314997477223510671802646792177247406856161826478564913938304445938787039361639")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("2040474488076465822174208700073014731576623100487313780934383981969367242852176903545405071507227545677933951423056936787002687730655384093186006422020029");
    a2 = BigNum::from_str("7289490032107060622308619243892430458858623563626997126735869821058214820439839993909910755037007251738826055245929828513763775778558337605572267058440680");
    if((a1 * a2).to_str() != "14874018441602154933025906594845583725642750450087975677440667203149985252310638546081735700174335108320320987917888419046801213598668690456830640515390385714507503622716542417719850386556569470683651552023359179621659662667283839221219439839742052055788214760759149458933990122255612657974262722960468379720")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("5748358816424870587535880254848101389169037616094402128484462622045584502077910764462807886139390550585645100269770150949226158081852788283784275260424477");
    a2 = BigNum::from_str("-3837989045349570274905895636944617410365328656196148398370530051193778397055123920489431763872397342917307177427917803024149274961393260104949092477659129");
    if((a1 * a2).to_str() != "-22062138166177274752220792845629695122333965486761396618280266903350636968236603835414586399247289268154474295811083046549513227125175092808903045543958961129268763760533628202346271827434712243603380788946271213469303928460928984127954560439002216877777310276717959601414282182046497138434140515487854100533")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-6412207039329317063389724376069191358335040769905020833247360526612171565127760577027927600666630507511663898266771758936798449635738543870466045280825380");
    a2 = BigNum::from_str("72938129894560479568548540155710833287365764628715311698291094785532751993916450853973956513113465108248204131291876859109293279889861534933995058812457");
    if((a1 * a2).to_str() != "-467694389945416805646677556171820290646754132643023905819123462197002932823708390605218268685610719509647475775650239279746074507959400280018548641168203518245106687319187857127540144167721485667149040920061951557952523764958886261885799390769439272687689311396161312640672105964462019395278831695585758660")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("9875564767294202943059297538782089783973671917066496525732023570085543116475780961975628430367493379946197799031530846138025595051699043573387903240218958");
    a2 = BigNum::from_str("1311365062347273379684663881165169931817849251473591806728957431816294257153777445907608427076000093284947862201028080162829282968409160768976939241463703");
    if((a1 * a2).to_str() != "12950470606777298767698587232043026642782779219505416610676162887082909083449767732348961121431608910791998747556888252768573711574667598511976956276329786028507561637517826939679184080103882961185147771222867997541798666676540819686156628957542040825002357134431311858930751203054528935631384398530129481474")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("7507226539187115817474570221054957782239660740771924616075260847401976151095062400001434209435853082971826793651869500366086634572093036203394011218297831");
    a2 = BigNum::from_str("12082983180335556820827466888490505581565456430978855340138987214116857637533902697519434420931032170910247313217548709333980380100748602743325695432660179");
    if((a1 * a2).to_str() != "90709692003966632365978397412993913247384685815413060800024838218512066842195031690545794550588286929293290866288045822021474176480544506673467339834940536296192638769665444057557223674936973650280697885479430476424362448135543944018182004193501830729758838274867865932578419988979488975227246304292635771749")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("12508933525368904086039852158827632055326447307293471415027345829665028687560262061374400775298628742227373915602618783845211137995483814911087179326978973");
    a2 = BigNum::from_str("-13321345063785089222416805201624201626795853659055425904281170204349286208159765967430303247210536947719710535591239211164237759600151542422261815567915094");
    if((a1 * a2).to_str() != "-166635819871388864594982890509295138063320542343222516114658869948501465989858615809659019209609374249242625413653371887626862243030541930256239052565121403125429354445611701468364039870286822996336383732724217726103351580652300814877191190354577313243247386592104613143243707190358134075662695492115187318462")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("12499086688496404214724755846725968539413624936580705393505526003231674711886992195680053864359903290010298831685300273239114446335294623332744183376669377");
    a2 = BigNum::from_str("5358932862371566433034875419196329626527837731186894396101582212632527677720746429733578028583963528602648023976026622824294948077832402500145150975573280");
    if((a1 * a2).to_str() != "66981766404614378972162100327170447119879138673058406577831451920056287780377932341206730241021233191983794205767208954462234450693241204601654197716252887877639372749754224552291169705077600879672379024756646074353012762987267667162386135655828447066800442505063867913351958798239329395140437770369595446560")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("3268510692251404157483080905771244369633404921989306114447600546495294041717455239967531466078757212329330458446529733356351076882526990499548897324618488");
    a2 = BigNum::from_str("-13031628663657889877321612567621575574030870643965322233109249227134743501676293410268904245528585871032343071952065218179464374163501695003677980791272927");
    if((a1 * a2).to_str() != "-42594017624615690519003538319473930485375749762700833269910505720771728609202891951209830714008218105796779136244716809286330187966552866039240384446386060193023725043765391692604072750737289940186853880856368133223756425792144716134457058807254247518828845720581754390304450659297798798408472167580158074376")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-9262054170517430074240805845443376375799709160612645129054470426627157671801704059158425938731947798978115237205800248109357782810665469899617189855016979");
    a2 = BigNum::from_str("-1108200524034756173737968234347407446572372289182655991609166936588069704218044135312877894956975500779345125165105230468074282216232362065513689235470567");
    if((a1 * a2).to_str() != "10264213285405714923327997001925118331114528271047082811618066780239514825951046161696576012095904928788696256961224846179994314503364754846894138511875077598949129440172024378987833854139036592528459244653521417066460268127307824736329154823630242883303811481325420017693003719470559074228230033026839757093")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("9913478700067123100822423950227009304307384334778359490554827572703570181907503302923876925935513130642103105710511852969602661008532754849509599683300407");
    a2 = BigNum::from_str("1118841017020236873447015211548815716338721116452837964972826197716619703392458077667672383546292039769615953746373811997534709639680759824587666222879700");
    if((a1 * a2).to_str() != "11091606590991555792261293588839037721195740779692718674872183847503980079261250185500283775114859542266835104586211641521712613819297173536859863980099330504684038445391992584974641588269591168736699024208818441944799243603813136140989423719312341448015638801020066448252770217106863248179509514151722037900")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-5575885199447748810340999042625345433848598633182197752856510204913983164855726122402913483114162279387912053841161344859605923494505501182456118117446342");
    a2 = BigNum::from_str("2853379344632449613963598120304880445961897297981885553985903406927652915167545978728367390348010413008020786565989386657555779675327531838841063749743987");
    if((a1 * a2).to_str() != "-15910115656145993104623649310595965592466875542044123078363201411030433120129046989184504908072162003397459683288229551337165259571853286764364865385459352983264393838921704521275375593371978950871629616672540410911743804653686015943978241306750411505913766008779088575695269436598290301714818658700709645554")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-13030078622108132021286405544577908591798445055883451849825068141388283186100972841096547875679965267947439024885410145742276526625141226679932592526207253");
    a2 = BigNum::from_str("-1050092141140996100375592247593240966259694050057360924207386664262274848535827653518021193983912581308888712198934367018453773900666633451334419749874755");
    if((a1 * a2).to_str() != "13682783159525048561047916081780820754334609442549444175685990037311001323618543246988006737194368181975447914955464554183517777051293881905501794807760657857528944866390005457530057044561495123917555798067301252898807344755239064794179401481831268049498170273464282148682857169049623682558043445501922598015")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-10484506846219846288154477707930183914400709167493323439740998451738406360615254310478387766527771565546831313696343724328697705775910958544516369952542921");
    a2 = BigNum::from_str("6551790965308078679634095203435743743560858636669085271921368040736185971491240679196958503555159383969102318662667431801127439961813530298701045281613698");
    if((a1 * a2).to_str() != "-68692297230773886340217335460725794138630376073723654984463573882095838966638286162370193923492624753915328046895185846006138708168662919413024633241246828264371481659726798212091384094620615174922495029177314585788531551839705624732280324830400132850716123921295825012432357019521402398253473924141486531858")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-4388600306754434488444574439508186360760625312462636912202957466189538082045916685625188297217947103914164036688284576355083563112815051738545349318490805");
    a2 = BigNum::from_str("8939789814151121863862565184558624708909063397294172762682532168083932158864643947806557977184835080570791159460345268184222045416317227272023181139736400");
    if((a1 * a2).to_str() != "-39233164320703782297231662734834915455302287910466374863213767904605433542369721281714340572863812234471545977186370268785039301627232646384309716076206106290502227832134086457278345281755807903239957756569181765585336233110949915037946703985136824701729755065567297751912299972912192727854245859063523802000")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-12187428542492646169635533028071169223299832785262343009457031535205364493573938845420235256969025983000659411867767655350754627212127706732758611420903920");
    a2 = BigNum::from_str("-4869525100717348678040507927525872413557395035187766967231462510464884424045522747131576354292735648077593244814666533710418849303771458403741972248586864");
    if((a1 * a2).to_str() != "59346989200866992842129339958707417450493549531666036167945232361014983802809194733528237731027298307486961972045863851113631337332495761361304647435740975662051794216734765413983198885144877935472204641651969623959316704388077790547728498368205806348788361271681312418892583645043615580979965447329518106880")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-12688850643914001126458650519410126815348794354891015236588940171521230346607054488075813179028831454987707480329493630883413985892678659534538984993164792");
    a2 = BigNum::from_str("5771192773684004903719133839498677522186217691992522125287767681136757179646825064469970670659871665216198768634433834924143820913637409999694654792587005");
    if((a1 * a2).to_str() != "-73229803142512115797528888724180802296213051631338425819498343440600855943924039535313774671839645777246692760975269682964214750703622879242128293765320154004328891281360473378059614462689397300664958771319207514588478715886421447867294054541459544704846694784049913810725957385585113051945274894395962727960")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("4604686981938484967047882284956457661615921271803915130672619447601088666464067717777277448581853704797077305489230510764489585396444508217763598696347235");
    a2 = BigNum::from_str("-1392422240737339053402165693997552802612531548991121428407660970731986097475595288918445750870268042630622583591507004355012024630155236127796708938149402");
    if((a1 * a2).to_str() != "-6411668565284840320498936184065998503426742618890796275678520048283752259770612522515461940058964563404498609380912088824366590527157372505927718760215716460592330552995565616601968707578308594078406559944314039865143818873840362250669167536433034579198438207447709927643662671107555677734152248518099603470")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("5911433707335778863938148945488142366275624765315099965733525835839828874177119334229393044994160554708300788351445778797435890958728502125121732005655414");
    a2 = BigNum::from_str("-12290222062396549125733934033772427723725613090261380490996753494250209485362066692578352229453772535434804392017434247318184359984661546262850216480450767");
    if((a1 * a2).to_str() != "-72652832970292814504004045949171814837169085479406526787401780389488414483931153963680576866342895490055838004447756595691178986666056027538479072711077921364434910137327298770243120529375597518372899748590705237157795020279051167447954654576449606000381057004749243333805666750147167266548901955015994002538")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("9733144669466378827690611535188881322376565099619431334948957140211662528205177789401094878068233093472689198190645013169701214510855674068577127430411126");
    a2 = BigNum::from_str("-2646137821728700080468087395479293844858858935057896734409199868881412341654884237333157902980763269396712322492101185295582922666592500604140714988878965");
    if((a1 * a2).to_str() != "-25755242234232072207713455417084315723495083771027818306856985450234866720468478749309073311582270999956300374221990035545420440723955324725310708935274082159302823174250553357284792112785987214184767527317214381535480507025430184941234938509965322256275028120716973510595148525911475344451771242027803364590")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-10303528469971461215241100940654817363910387158848946066852751153918375664699765053845343702748780313617843557511116837302628188829367717132426750068645833");
    a2 = BigNum::from_str("13198759630082065272853794640488683770926702865897825742133547352911595217649131440961288727989126508669353748134626399417344491398891461434449008158931669");
    if((a1 * a2).to_str() != "-135993795616860551415080032994920242367174763526850732014701550209941647733413773131040112426935973560718073377175077195009189967298551212070463061419405893383328910176818046276297371047383815832354223245081478380467563790300263320300919158743123802449705950905362734780656155525963315495604458839410808585277")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("9686260806671040929305972808893273485013257748922703287017702500783207081583945264026271756900021704128554676582089180450299154698908492573667902452995266");
    a2 = BigNum::from_str("7434305871210543318783054009642109308134198890804672380491089071330710011998126818480410115937938040644052756537085924873831112547930866767831885622957758");
    if((a1 * a2).to_str() != "72010625585111093043255432463394477803319939229773640137691362867043885296752837352537597591470029705046166319997894712457346219477800381838537221528941882518927499656417040058886893950884313022354393540238655242537351952835825863462291786074303467709541792746517292833894742864138878611641337537041291973628")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("2398369552514266419373477258405184411442342830645659121895239571392989995692803388936506715492258522383344299399867426386511065331709467217604647246096084");
    a2 = BigNum::from_str("-13093070773394571865627403336382969585286258075147691330354300883616330215680079761658597326891661228203514133468154278820380749081089627286025127741519141");
    if((a1 * a2).to_str() != "-31402022291823959469833750662730934194512237860110507709096211782613643442990203856929750094823520701347220592726499263603190019350437374525280785843225125268879823062059812662774254859302141697927789791442354976030543299664278836561122806151457034461334989987859062738650036321214714841358783835851811143844")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("5616780267510228449552453264336309989301441239715284328019798805292411103278292991306252276056526120102209332394517966379251264135742785400605415660130018");
    a2 = BigNum::from_str("-949493925212490453340045549085773172616121106516969210721936264141032734294151593528680828151647445650345283454844801449898615903101014867137993148912362");
    if((a1 * a2).to_str() != "-5333098743254348973566894098872285492834145189441138429836792640188284046491240726299321428844895509142787137976736325426945042574845491407893018852522427663481791055727626412652114910844187043593945334181651105382563964744436569604919718656008596605416962061159727151142945129996546557434603515624207482516")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-7168161606029217855591048722141132077044779726907106485514682943516588553932750928989812997621903531317933361332650937578081079507362010302273590440294170");
    a2 = BigNum::from_str("11245916025901102360307550246469896380107127486876730561444632774162824636641893755657163664501612749478628371668592873557100209780590855185624844886320401");
    if((a1 * a2).to_str() != "-80612543481492965042666398978180296960646423633962771622174146039453544915820472988163917373137543293687651488273704856510213061481266008991311809913025185790103356017986190887560428918630915215230650009566992193979243247140174461569299074596913144103849404448256501425705747554490105892106511110775312362170")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-8680646891743370261620520799957258604693270090940416049632196533213247228554514993705429792279048918578789003178457696744224348602496088696327448343226063");
    a2 = BigNum::from_str("6375457695860407769781337314939500522503875860799469879831803449805075039342135285241039566367762423475250885085426798691904263761835050362381696724517068");
    if((a1 * a2).to_str() != "-55343097031011997932066923565669604656492589372244539666132544541080935814450964236966106260392934943022888786268733553375581788642030949999074588985177215761506217432968267080609621898555108175151541768630992653815271143835400627773748808049496969111823889827623219824064026172547232609906062898452825943284")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-7354275362629917454435255635989286525370562965402408773294630040089918737923835558224489336470105110678693161877822153262880687002498401164411486899545454");
    a2 = BigNum::from_str("2005344559409613322573816915193899747362463969871896023183755051028278264510966174091378240428304737824896587195666466270281153822999238292026360954830617");
    if((a1 * a2).to_str() != "-14747856086850066064280473054573006666177293860299032319779027509070501138857790297254088040988356638608455311268753468390076655673604121012128780490670309226827201767354900533655941489140676099226639464047226045354081481661369382046870356379921752134984956954196846631919485643630175154535064347842862365118")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("1454394743558020240113422738576531287268823090971151968622462045516912007818744199136364006202960813210755864726211436636382619826742933992170388401298617");
    a2 = BigNum::from_str("-2951910049266514696815217072048054874648868382485127158911949426619486654240073192046962068308134681751577606162273674189756484903948852098322461642130951");
    if((a1 * a2).to_str() != "-4293242459109315535465216628890289408496611527317969187189870026964935307913377436586233618756263253112818019577845146816515777809895177857467691566891987475627706219505607958914960861072700159820867899696721225812263492089178118476612418777297112803800469095871218377235933419270902201817677501687569194767")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("2962400558184433493125343621432855462342790932450090814082744638974703303003487823867125704373213083878753697459806603103862546640747399047263024258992870");
    a2 = BigNum::from_str("1816776690474527784131332073289921482320632805546939502793150636207547237628995409009108242283033059158489460556961315712966812725985081878362451827010662");
    if((a1 * a2).to_str() != "5382020281958208863750080035669127075079706779378444688227675173052184714446870925274233809168914614867925927658403305162792963472060323944517771140521838020394770007311116036748756456449986717018840058627498599024869364286486581459882990368543259342680943659294839468749702999741196029069065276122871979940")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("10213379587527709777288057570949670417342447699042902386072183496411813485914909358263385955544962913819086292881225110407425255715578353838821440974696136");
    a2 = BigNum::from_str("2962904812203247165739100623328251734830959840320220158565160543388088919522706891826714993501364143118886769229965770374042613196801958553327168837523028");
    if((a1 * a2).to_str() != "30261271528744266936248825677706161873260171789135911168495344988979570797366187707216650491842074002112705146554429531954634794573635667290065012518763890357930588315326109033101743041384249229173162961826546563006788333034997752587165174213978866380938191074436926600103448967482090387217789873627202619808")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-5565443994993331840406716032347338887079474660985905379868687933219129389132353806582892543562564361505562919188563632547631576952850390222536430570779388");
    a2 = BigNum::from_str("-3165744751956781431939389879107693113076896572221922174761784687253889071756229768203403658068452525494398867943343169923001679268802926655635133555815727");
    if((a1 * a2).to_str() != "17618775119459524028676929619910758270872421987933094633173933180555980222189290835693963994874126783154335582650503162758856588984248523996545360379905503116577337902923597551481366403792867693548468462381702532199028320780277442936942835613632665844578410230863964060966536473358213280275906721374497835076")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("7977378463357967590130666776117451462899607692719072025271072812069179338138372239777923906540177040625520186836839973404955642402362973194425626695444912");
    a2 = BigNum::from_str("-11231416025159285032387651585857040272897413216161634153372473738946358872753926100533127005098863855381025244326821692794660897063133016515018179375524145");
    if((a1 * a2).to_str() != "-89597256312119229490128730780572072958120594671266842235319203170891457489719055457804627002770123581247425107547492084796294780580865584805646088968641846627847240670969349561475184369348162583114693645696020606235930406019994753878573870265571838558860377045356807270617912671615456531020403951373973400240")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("11983590793059680015425683626386645213728952704574854154720243515744225206935010242064816319597451789886818460148313715513006480861600825629765718005141030");
    a2 = BigNum::from_str("-8980752677566587571967079897597514882726124656900000257905380201257050183103698136999533382590672211228921490512654067283776529350244356125938361259107369");
    if((a1 * a2).to_str() != "-107621665101633027930184347037206889968658160381478355772462934203027505684500218410651593319952910443441239063854368458844993816624662135678116573785699709778449660964994033383288493421580953963535633339292032138126434298975821045326357857369505489998235269381463773803794334530825138238694170759850757250070")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-8116308306758102568145483627014556714426906389343793346627388951403468636981237281303507880344232665140219583188508576211532195733600783909900057045790215");
    a2 = BigNum::from_str("525673768411390948892043513472297936700715509402593749096461985158050913698761332671564564606747833878946138282590008087794496000170190138830629177456310");
    if((a1 * a2).to_str() != "-4266530373202207417345103950970548853170037652393442301543005726537671804055959902702937344409556039075081406636987849074438956932366361721852105598315654694173102209337027506893828251902836689775751817140298402309981108929195908169172703649888480353764814888687784590942904552305409252023942630667588006650")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("7079444452580608663744469581020256079561133458403697240870794470117760921865355868174884157834596164020188100425510991423004177210276960665685077510383804");
    a2 = BigNum::from_str("10957068255175448981740361113812721530885683491290257297112467443278657340555802749885695315091879899697558052440899736292768534453937238348430985261340474");
    if((a1 * a2).to_str() != "77569956075648921338585213068511809319534320665697068970666490126707777713616167934200879125267036504010176894456434420159519723101799567471056997216507913823844204429900968235259996771068323082304956326817094208671002334815209508040850781266195563837686001628058745472105240967562136087222247057383259283096")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("11546403490155290786649112882918975187733349053951423545289373693960514569947443962838555894406986153204562377134669922418180764946137139188053768196022540");
    a2 = BigNum::from_str("8784298005468329304562382338566979362994661332092451583988994892346025724965173872923596602662872139141228114094604394123041063772439526096029946417923961");
    if((a1 * a2).to_str() != "101427049148903677114097774515305408758318604120914035299423102200021068903881359041921221658840933308236277597241815966980662206048600601218678539089701241928388188667239247897978207149946186055389422565366893180444148502893546251225048298832200222269698913418598153036289346532417946556356616440404362080940")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("11960563900452848144728315717461804873885014343242787978176452054416532504400012345781678437487645397236656796714080907893365369031795853992016897093528853");
    a2 = BigNum::from_str("-5304366931392713491718463628785817013031421610037947561812759421714998037552899600408463890079676349816444928797409478509409138601794851207372862628830834");
    if((a1 * a2).to_str() != "-63443219634371538435930224489085065859984772065785937061460536869444096053133824512610259944431484957514595805422626884096547487336341065331277238066615952458508353669593119797993108766762994627268771125428382083541510576989942854526050836641295201956579870024454735933339477781871641522677667603210635053402")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-13324742044991095227872921936157201427669782722643452830186337391074572620986729194946655705151100333970414404449038525152237197500893389436148401570192027");
    a2 = BigNum::from_str("2949099029090141401921035103723221092827514579887116604386672302063148896117424106547784095033942495296618119748172342934906841954582438090544478987131536");
    if((a1 * a2).to_str() != "-39295983827759824178338225345172420685697149115740893459241449982020220393682034565926251959458015414503275881902189641109746074167516756267351866728592697073904047268602549957992074827035923233149999798418731045673817523927983001821639274413552721703038602190672052150723312172664498880589010405373427463472")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("-10787957251296750325423417052103306031221951780274392412003551796775280694802965052607096303580949906112759147467145394947234545353617477494559911851181094");
    a2 = BigNum::from_str("-2493873317948352584183137317881957001664358043847207003168809356543038454631874470554227016262399574585764030867164212390372911284889208606303407941431138");
    if((a1 * a2).to_str() != "26903798744176416422709014591549068151075300301668337646505007946138030358411597151580319790205883986988865802271367580122227679883303247739884784214445663583955079534330954699772346251209706925640203267897270668912700456224788984831502017628693695136038655301634052068652413643642509617252889424361968504972")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("6575614421325046124554478493389773281315889436788604701152505312728437086750431947854548579492369957110147808184852593526679827036526578281109987537246909");
    a2 = BigNum::from_str("-12832633863967072289047752152967638701236040100078921194314933364277514800107274709553121480700982792142714903895088967128988464383186855603155138491896837");
    if((a1 * a2).to_str() != "-84382452299486030718320939016985629531937306808966665375517687611065923622417118845907120773104400841076804892351118905309422357223897259648958839325874317530894249792705072508443166218090468001649979685966346175026300197716001290927432804508454933331403611662943788744268008929819067298534256649616225126833")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_mul");
    }

    a1 = BigNum::from_str("283522691359746138509144947601496462101308049792938142609043721855515151138101310771835598952160636592273418491560943025984053861571886785061962705765407713311331394429219691087774750137669217105174398");
    a2 = BigNum::from_str("8094376060907892213867449245574046609363961093383303972737566628144760970968267939584705202890652081157884032708009537017538252466423971186297357843988879");
    if((a1 / a2).to_str() != "35027121204440961925537416578548310308791845102")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("140281500101230542677449180853711036626458135516848134875216662185587571743239659982318959303453538608569379354684597449308288166462158177731604088530620863608420750935231516601548089337915697558985674292603111");
    a2 = BigNum::from_str("9438863366412811842931582430755024556064352815429889721618816157387185985133311909397839575828521507126908095566738779131064863377504419974372936237163251");
    if((a1 / a2).to_str() != "14862117890212002927018990630080861440803364751649067896")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("436882275654502833183635238589953776893401716201765177708197587258073345657366421714400217800539853850985637155990754705169862624706315090360413832177088531727697135850339912044264612");
    a2 = BigNum::from_str("5665198612973930526715685325181077121831515905319330195506688004022761496302315868686710325703212570001498833186916289877170939352003636346361378521646374");
    if((a1 / a2).to_str() != "77116850705638840214634567413")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("1010474005952929723798222816407953350859777544900568258249907129634448606555956268897349519521125541510506631949667516924205544939320593233268742952926408401131721626851042464402600806187375180702623314731353496539751238797");
    a2 = BigNum::from_str("2012073071288349776814062741532804131292576828048433475672287355341689359656243706431289860315097455554021891195856711729076433821966814143612974851799359");
    if((a1 / a2).to_str() != "502205422045588771977836936885756892496932404806548255853655474336797")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("2225486561998323537943055921640128852311503811859718038536791338987059123900706929422633132153626659003279812552215321586797493430137883962355206668184724488956073636132567226513543582203669700711245599423384208788");
    a2 = BigNum::from_str("10773264549295206753097125388118963734398692306347379134525880776334578076656880235255549684199565326070041465250556160228179819483474847110174413265477404");
    if((a1 / a2).to_str() != "206574947808546682921457953120241800387767657823702078561248")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("256281186357778299587558696107822659739502919721361075060385233025930914695073894465216138373628161524332238773860234353217667880889615858405352185024697959172994545828445371473039901625253063714674557110997263465070");
    a2 = BigNum::from_str("2048854303070923802780076557373162457934840790039456481614411993805929110464168959247504942080426772123688302910479819982303143808051597398573639609535094");
    if((a1 / a2).to_str() != "125085119997869749553444734026144856923926874534009978788617247")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("29515872781826014109006596566442429636129036980117558684181825238707886859076985483678108311928140137859789249937283992103033861300380921958011634813539514517909041007297266002975388312128758290938625161544903");
    a2 = BigNum::from_str("2527447619391848156686784810392619933732435305483933165721917783502388463836754218306797211691683441188350053563266154113405264796179329296525270993873060");
    if((a1 / a2).to_str() != "11678134318339737945257289230297447815598024655514857422")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("76837224915690282558383623771217696896572526131722089530986883595502078014311300525079351291567764535391697883868950132242010438428361891518335953536070623859160566970036029627969");
    a2 = BigNum::from_str("3023459822861522776985531535278537687630920888491793178220018324453910103270694079639794876448864320225381224664123895081983514169422913624041025020995462");
    if((a1 / a2).to_str() != "25413674868339567706153664")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("18515629299323832251769966170391490088741699875471487390373704145078190752012682205321362892619825146785821355118955589918576917075989521696657980802080372274447547537775574197938627607");
    a2 = BigNum::from_str("9323967137705673688900622657962329781354612915832118621170342199684806897282791946507043198405960107108128755650988491559888266684398628218712491977715543");
    if((a1 / a2).to_str() != "1985810227113255238765903435360")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("19186088867364711625100669050034486064709890965646763306390881594562225053973469843757702802179219321608080841226714426894851162491071632692023734069363418528007278");
    a2 = BigNum::from_str("12560883010651986440144012325367319791529179145584478568726293085501655510348655099503341755835557500627055900718321452894701626071152010655610931929251801");
    if((a1 / a2).to_str() != "1527447461")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("609529262856955253418818711190933766743686383068096317993847391764310507955924290676440416334549815908793571637743525220747847813466139669596027417811807041305269952872503028654487236");
    a2 = BigNum::from_str("10960417582520332466359114175715973177227996559276057637959234669841470222232005838123130349521750259777380370555815311899019112801381917336945197936985198");
    if((a1 / a2).to_str() != "55611864992172576016420929368")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("102569670488609343810191619670934801638429052087815226730798329881739912832892181326904733523315063146932734602890064217819042408691542525563338837409711194");
    a2 = BigNum::from_str("5678629157981441200390657587455872752896784345326871147737887000096771088493746896485831363442135988060279316239248425489736064623175853622705298562637543");
    if((a1 / a2).to_str() != "18")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("1624766569231670393183065533062836156384109636534166479122551695761215930050720402295965355704578580385712857603201461808007876420376336153244937893791912458420568998252860577996935907638124840604");
    a2 = BigNum::from_str("216842786553634783501474212005710501045402611850977264993679223166215435751823151662802254632698397396457988038118019148165705625429115280631670172086008");
    if((a1 / a2).to_str() != "7492831996188141454521456806665092302329432")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("10807571675355743255743231869084729930143102492722273327809474219394522837237435257048022601386265281171399169660372005046877654960352606094171313931746112805592920661796279");
    a2 = BigNum::from_str("838665609407309414571221947080632335149768699858853009994220846129513399004743149610944195607160970881526507295534294900919693676754737763228230221496713");
    if((a1 / a2).to_str() != "12886627941013971366")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("1309914667352626727691104755804611643685657169316534608300980918001940682949644699468914308041118710535170892881370690159923323863944679027357906435140948849831485459156715419085509");
    a2 = BigNum::from_str("10533607508229580398035578425196700558426096520041949752444720810170108097144418899144955023818007873412793051647268674025919607578446412239328391412447050");
    if((a1 / a2).to_str() != "124355750518445943694171184")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("6484675910447387314028071357223854534421857992914510164074946673789966181844513130650354426911741913056765033584863864273524681491037120745944592463288450264439964823200650526008577778136116277169171189");
    a2 = BigNum::from_str("6408918305478409485103405895109170501465910441176713702387457620343994920998453353943279686877947329604317872631063197717730782639308050060720586515421853");
    if((a1 / a2).to_str() != "1011820653869814418861315468686955586490660642229")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("379123265137333897609779148193329734714667333617512090826029158871443753278231024638285824686279155664703834855587469606756656868722537777232097281382849080422586797383257122786477545754385301612436821");
    a2 = BigNum::from_str("2732616279002349375675588717558926853163099866351690295812346349084617003426149745148967274362466515056561677021697510681177194504552207359950738479297255");
    if((a1 / a2).to_str() != "138740030223251094508151467599654407003711075175")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("149795556767411750840619059994121569183882482112643228958991902810406642020699222897536636227551037467205219428530099054724338901862334087363122346148257672506846289319547981800572750589852968666519487869338037058");
    a2 = BigNum::from_str("633588812994596117422260895258669319256167197354169144932104447340943794792370537303931645397738145320456307367184840192804738169731921712889525171781435");
    if((a1 / a2).to_str() != "236423929361090783642756772078169175686988063776442513771678")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("1800037539429358735834213519921269104342653811420648354212180581325619601791256263296063821530453486952933995174590346296728050065825980616730096685933235214845933956183802");
    a2 = BigNum::from_str("526232105659361822630700714450395705319188536427000591515676274463797078429938056682852094397233861597307918744628424680181696633238126421142493664785525");
    if((a1 / a2).to_str() != "3420615200157610419")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("878631011611943364840117052642299731552410121011529124768071873163798016123242186884866492321539868751931921460648213794932100426397712872614662446396500543941599672881470626445665748650883221759477398111561229754696554847");
    a2 = BigNum::from_str("3961852832530192085576751226653965691635349594958824894525881870128351898576220718947965555046951143756872314463407588524958700583784436562263835763458111");
    if((a1 / a2).to_str() != "221772753494938805980498546326481827446810475355944243515668141394457")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("979534737901729554955929373783231405968700051766999044483496108395207694584939775429351802585922944051827664977046577923197374435926811378541325168109000459866836996647244270461210186");
    a2 = BigNum::from_str("7342196404737144993763466168453793309895422729623579376585255481867405451005631292619972712191410421939311108744707146107271975846380961415917830603236152");
    if((a1 / a2).to_str() != "133411677365337039392617757231")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("38209708802563767319958916765728599194406707549185595625032888741439716870206810542392715972884394961972741504848269036341304035802327820279447623715840783442297579522694988393497021843");
    a2 = BigNum::from_str("2434548145631043444335622976278952743375725458200098846216645288779791971365798971081074171602629237660495881062341457932539215411115186264538908243584718");
    if((a1 / a2).to_str() != "15694784624051736045126161877588")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("1224342431350069641078425011579165020590898343581561773725713672930040463694966937562508164811157830060458997739506027758093442910348500015173609565689026150060");
    a2 = BigNum::from_str("3804381413411870025870426817569728523116517311229070763686254390336590832744247381211040237446634220670684040731711575671072953477511234714979998384469543");
    if((a1 / a2).to_str() != "321824")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("124152648286069114514151082824420675855652559467607401410400015635380232693872848510807763815355880189937881631557729155903273615750877176487239359056197853153171672267212588452716241902189898460248052643571960711959217");
    a2 = BigNum::from_str("9181690152436976795998254680915621507980501897949933180476646410807988335695454452355322899725628959624305750754848658790733524013295761123966289796854638");
    if((a1 / a2).to_str() != "13521764100601553098589684827747640500783281621982199862856933866")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("121351648070693815577897610312303701441233854135536646081945171964720555539226925917555789653868892916552966058110645044671439979930545718900383944882404964942014077641609779584610099639465255443027464577401301210746448649");
    a2 = BigNum::from_str("12064722079555314752888374624493852811654575942423755942512044753500381249586683166607977491271864566927473846701279468202530149962808318240126296374370537");
    if((a1 / a2).to_str() != "10058387360313452993089008430771879847386171112387880652668024930541")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("96794155344817339230547993421958676169815933433698432518047121750773162292508064684204337031999021239942198523093490990887111496080429471995848052665599997704472");
    a2 = BigNum::from_str("11663638120247051964368682522133928248073178528606987302872285713775249618469974252351942455680808189857892405797231441604355782048239455616547328333171046");
    if((a1 / a2).to_str() != "8298796")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("80331230726705066265375743167343635796743392858590149275952763943331800358237281587221184062879030241547538017095544694610503101449021492871706523462778877319735120852145185291450008270898618");
    a2 = BigNum::from_str("10759505101849755960229842173669904431895345674387053472420047797722516076840129047318313028234900848902674208268476504823564995326705473915681501147966435");
    if((a1 / a2).to_str() != "7466071159062386302451770580840937459")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("186273124447514286597017604467726543165190986609109039060243390379026293470644939965340719449957096870108002735225900289532847743012129068306344752713145175516221767");
    a2 = BigNum::from_str("12467742453122131406598043628224826939217174621390028536169061012650143867609876312585845182685693745332725947657866083880413900510666304806827832294584119");
    if((a1 / a2).to_str() != "14940405221")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("2005460675266279721990840556205005204318054839918080820662149343759401024142609687406930045656144201391850520340149894848636744563661270170731035938328416962470046123904127909014217");
    a2 = BigNum::from_str("2243034139175358137060965561249613338796186192255755196959557874522270258373445762562687618849557923793696720988948223662130752668939477684230955731069258");
    if((a1 / a2).to_str() != "894083884074800003613877823")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("91002241187536037015589000624879295796063268018879854191990360088254145702687726102385942510768629123554194618741753502340452191097480931197301563524192783368968263532421923970476886857146604836664139272054199947348376");
    a2 = BigNum::from_str("9462441845100654213357331405438938872476201024088671415824893539881545153422102714402369080404888974591146305741556621321131363054184930169202231674147619");
    if((a1 / a2).to_str() != "9617204805824412951112028442108618571005535399647371981620755512")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("214303315577524626197800633583100425485328887488454316199743029364967976065900161472566114850770843295877747139337283640357282417663957778274274525409228452191882813317541742909923502594513156");
    a2 = BigNum::from_str("1393212907904186466123448606588515640759067615431291747508112604302039934988857834739137395009925573668554995373543798099343654056297003985682793321762568");
    if((a1 / a2).to_str() != "153819501930901300734238752711969116024")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("129967904405704205238737867661495537223822710906966977240499352912979819437121736222932392171534326950390525371309095431028394658124839769056610962298170005123121120734085704840551137929777246606909412768646348366");
    a2 = BigNum::from_str("8644732059664851620950626906897428573929071643007679726235321446496800065928330574749035286796089596086240718694419272898336950224452595968603503488304455");
    if((a1 / a2).to_str() != "15034347335311505580455524314718597753128990235699145249446")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("4999832455852631831332852441734952452964079674214693412426394486716135075071061868753104499164960059376437046651199879878057575945046739227202627017108932926798244389200773299895866422349965269027285874101396871166");
    a2 = BigNum::from_str("7105183686758641729735282472780570799230557144215174478611585445581770029506731310177450346153791801554525994859506992692598290587170514842728779011928328");
    if((a1 / a2).to_str() != "703687994044463153142612471515354529135653799660178998714188")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("49086558539810818266027310544176027703578878067595927058847342898248807269726103606101107073208095779483300867021836221501048043264748762673255254351650230623665202989189673000221983521523022114341141735489921926136963808455");
    a2 = BigNum::from_str("6859321996280888979318694652871529905450358293979523999725077400098462105545558952194641026111785188626265655958390787406017944534563434123813741220681650");
    if((a1 / a2).to_str() != "7156182282509183073620324547903477114031250465388912670574688945060233")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("52714842714073868524415021891492126086719733839909309456407773602937181289335789326897253768739524303603371739240363799980706942929846292201974050695878805414423384073572767788882466340447849263400904039554043100968731414662");
    a2 = BigNum::from_str("526522836764805794854902386152391171735864752273659720932281586202245852309198132980729982019782351381780009867780542333007424511492169853281144929631188");
    if((a1 / a2).to_str() != "100118815430642439047128556368159699084663161107977475325983080369194360")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("652734119273333839226163584186003953905463430368165560639548408865530966294660961282191358149712968533907142888238961583646356971287125995799804659464787184346947906559095679064400864468501747692491230770377");
    a2 = BigNum::from_str("6428836701222473330224245641605010121533304117479950517876329920055837947493121293396670694477215025203219679958084243103561788181784886599086600045411468");
    if((a1 / a2).to_str() != "101532228863304833560720098815528504185548521965707158")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("24422600243525550965444281636474783157112318534117057662427064605450206950355183124950202172937349411028675820808057461946913057252795603135672238132074445319531087910493724340726486158823246824221359101438574709195963826");
    a2 = BigNum::from_str("11518844341050181356421992239969764800783669502326863262319691329118091496773605363063629230925483590765409309569106017719709314205581873872047435187211519");
    if((a1 / a2).to_str() != "2120230078679830902679737878035644979642339576578373803724533551391")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("34529121488892250736279268133628492557280282916057730599251677017512372116596714978902914185418192339111985255274080601410510342519369393868892629078266771836133455858618127942879902074579988971776776032320407399");
    a2 = BigNum::from_str("12693464828494228254001692070053710696350591591291342946436928341267236949148513069679990799201661306736994814310396725064033116983158445559075492628653770");
    if((a1 / a2).to_str() != "2720228239919288732343416404334366424061375711920340003809")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("17223846134711804721536352843027322534817865638303856143321008056620452453348461094375688538839385611593778409583239807868888683857733240897973066392572508038922845233968262366090555421204457229615977846899975384390526771663");
    a2 = BigNum::from_str("10457663413651494145169186549463552231405314704658314810557084906855574324193873837708116513214378627977531935277840976997470955605561073045441605897477419");
    if((a1 / a2).to_str() != "1647007123238227061467454691752771707471145518660994067855344244492977")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("47884946471662464883639491023110258645644283367395204694360935304262574002411482785359609744984832687263359854884349075756103218980782939709206920727960788773167684219165322150915027121584347486810050870946");
    a2 = BigNum::from_str("12932068655123568994468889020846930931362353303412633388380032539999544173669357683210493745999294583588001554507423268578143553434417427190714804913917300");
    if((a1 / a2).to_str() != "3702806391511916453023763204317467635543936651211941")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("612266761792412171815134588180864468825881021964763486274001471612798992349294255915892689441873395537843792085515160703225564094758283400895620222141947136746");
    a2 = BigNum::from_str("5688725451755915761284212036832550350390013134397832408712023187900543271621336655639507300487506989623901246952347005279873352036711986361295541355361843");
    if((a1 / a2).to_str() != "107628")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("8281669058912781567692716053377632060619747296174727236703494923929822591390897237680914871555116332492570102543430783506390431662171676814738564237829768420720782516001389924127");
    a2 = BigNum::from_str("2260368186934898234120201112655526708405682845561550499573268002051717547158939838910454704612491491226744973659104310331777431843516512329174613515039899");
    if((a1 / a2).to_str() != "3663858439868984593022761")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("261038582387357383976568264263801884708711726510803738929862699323869923118112816349251178275601667330461881581913012436904279803016150218420703790885104901051778304715509770918931156022799637283910311260442");
    a2 = BigNum::from_str("422866726839172524697417920931378931699050263928179230764414899008596490819379163133710292760647492229217604065309185501536318477704321836136162105785152");
    if((a1 / a2).to_str() != "617306980708929854324162024536292845471912413402321216")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("64616575167738365636766094006597462875147865419040020326915020835387703924940087797098410057032796469060512063646403074770539459144692555059179731026209355979214777408214002587954673067683");
    a2 = BigNum::from_str("9412868262138480695119492380093713044912647258956707884899704737412232154945334641654588925660958385077527516104805348938780692229830187587155608618122684");
    if((a1 / a2).to_str() != "6864706205190034598370148243049837")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("705280767007537106284394309936503643447642014169856574277845139401971365234980739396087534758932078300251238475521681728938062058557457353970667928988525863121377094100475277896231195805711113288432783033");
    a2 = BigNum::from_str("5240978661074460293607221341626437314037503406418371010498704228455078224556429526798907283000590784435206616572205750264105507262945907406606868448217338");
    if((a1 / a2).to_str() != "134570432855558797388341157457431081366123175823198")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("1743181505774455529238922033869889342919090061340169921293495312484408836155337452224434490195254615400431979322355247870773907093370867786326826701146206845113338063851370672286615200247287672");
    a2 = BigNum::from_str("3874136594120627715876523699880541696371378684017061194822733087012425020316064746112543224819797445431141503887649491823457426119316355220467828505191260");
    if((a1 / a2).to_str() != "449953547951793942477331054015212220993")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("29115356175787267312214837801932075438859360380224860526351047328262793915126301807747769150553524437163784162253530344648723137844629145499147596313108544226179718769741433972307500381136501453744840821231292051514");
    a2 = BigNum::from_str("12881430802290118124657852638866645416574090335268527011886074328946934465735124949235917523313010605223594859526271090536247187364423877857993391902759219");
    if((a1 / a2).to_str() != "2260257934282502969352811348343878711440303167082317105071454")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("11346247131572540457452208538176469519430722885892374085727489095313571700670910449922554829076632561749500670553072072090252181483116587620465855995847444177005018792434828723201277031347151018545680093846599");
    a2 = BigNum::from_str("10695736064007449441119812248388950072234243100637690050370412895807972259310050676236714921744954674503931357851463998715849574046390305651600300728705578");
    if((a1 / a2).to_str() != "1060819663431500130913359132363010492575124390017803929")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("961411670905339724416046008550567975497833661030179347400918843197538599044980938368827877873118015368972265713792956828558051790380764015161741522294249589167163487236970686642");
    a2 = BigNum::from_str("1811254894974403219429502546707666452108913184725594449889584655218181915303297517211054630811562232967598754901993447072937672089447997664011839967365480");
    if((a1 / a2).to_str() != "530798659853408683949714")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("9123871792106155999889457447246527051682221213131888483148644768388226238630175058840506001094968642471604939749873086023146218141679216213316225722285286394501944516221533499159099596485093504");
    a2 = BigNum::from_str("917473824616451628460164409441553455604879908989035210777914350741979129060273865793385645720851752133438179809378179016184171012550678977238245949680765");
    if((a1 / a2).to_str() != "9944558141394796827805573478382328740662")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("1603664964985540225389331652226403674194248217360340135602543479207901592353303105118912165431023051152840168867797426742088342944244351577584576081640918370567691741257430369475258042");
    a2 = BigNum::from_str("12363543951310272748925248714858132258280367381864484896521552139418669833200240056152539412577836478119646184500255788943716736259391906503551030685504355");
    if((a1 / a2).to_str() != "129709165211936326794574835518")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("55157847696512196220820476837191937229393155049263317453820996294919589027998222321612569440099091085920840634074904289480352005349254756257270864189553412975784");
    a2 = BigNum::from_str("8273716600731872902498485985971588293162410861979345110186762100501482218051714561052211754501956707700076003431547038047461399123815986386166198916749009");
    if((a1 / a2).to_str() != "6666634")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("7467276065372738650827446587230149533230889390476020061111636651407920017970326743721396212850291347503995168920531288336865138089454280575366906794372131411");
    a2 = BigNum::from_str("8483383513533424111566732451171288111253651389303143383626380796595106878757487507586053008317303608883343292681221075370421378967792732556272343654613149");
    if((a1 / a2).to_str() != "880")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("126309960748884538336995496435823740819569636368588593079121000616622923310404506424348801518455871222046395489985943897218611045363297348026734238181396018883561794822340197480920004238");
    a2 = BigNum::from_str("1152210303115102049663330645698777029121708310073990717219929538523861065412089537151335266111476224966912766659714469095775204660058848037441992543737897");
    if((a1 / a2).to_str() != "109624050754792274585937213833714")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("5923167745262520663358042458886341395950712603369345821964617554691218370671910808135790717155812800956976094433954056783561366224770838931779449448286445591583848");
    a2 = BigNum::from_str("5880257891143786788479484067809492863357535456831887140961833957339996608925377721452616064618785523925028940496256604205078127200386009497581103755095636");
    if((a1 / a2).to_str() != "1007297274")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("47165039370615462217628099330925797011330209152404476287341054876703186982874599087214492702757523992996372606246490110674916589509806952596384835984401666459657127");
    a2 = BigNum::from_str("6991531492793478170965199873963352442642068987883751596722376205531842969726091739117690325576533076780874271325089875413038800809611163021867559849893354");
    if((a1 / a2).to_str() != "6746024017")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("789229669310429735752385242351362113758925467622376616973673841180400523191748067358001436031282156403684763389687429114997854165098527087082726529868087311381279205151102682601827133730686660279106509559677811892247745862908613425");
    a2 = BigNum::from_str("2082993233453429470637762084472649581264217807793981724452134342559594441590233454409804544982432702064411195719128404478576871257510834627186441825575394");
    if((a1 / a2).to_str() != "378892094623827754825101806776837226515122909359427910073849191572698359399412")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("438237853604197387350238404887442229078133048526939391581151532474713215927850561177828879041436087266183119144676590032747970347169300797720969613701361040889570784219010459693857593");
    a2 = BigNum::from_str("8643026287138536567046615812484943827188483541316346693010192827982018678538385258522776582966781036078107080382660737838009170348875038737000342262004498");
    if((a1 / a2).to_str() != "50704213899745715261616713071")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("7231675152934260176926737031126005426853480511145912007085686939684875166443531475517020522259374429204333731185405515912337463052238613419299587532134017471326320850062229646419674126901154104455580384432354637531131395261593");
    a2 = BigNum::from_str("1713879167525700398154269793118440951790352863183812705656931943080145872313918765893223901914339822190084037060985577810933513172774081708194112072394773");
    if((a1 / a2).to_str() != "4219477831319061130170789781181494449548040165182849279902434701211930901")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("30120298747182662536066957083718478817300107100553445285900849506294668916641250353567523469233968188141756480333386834719515647814444086482890604291347905266519515862238266219209785670975178");
    a2 = BigNum::from_str("6773985540146373043703719117903511902762497032342563818877026715484329072854645730647661341597100197024661578058891217793545153016632196977808694422312774");
    if((a1 / a2).to_str() != "4446466348159907604845674143656887097")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("1735456116263346795401226341972960166295893656455638982705688336414015126489831329990061829022349996794808348184723484709875547364284151461322762372501273810289573058171995201660839");
    a2 = BigNum::from_str("54462353992420561194606913823132376286858677281077168243546662380730592037118456981719790193840894182869328140437512074102566742227214508249904691199997");
    if((a1 / a2).to_str() != "31865242484833972670994672113")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("32978608082603521661557149065168060554313774144219288811358724266502271675416569641406145529016315972630081620566652985594433559260455622550475472153625961644");
    a2 = BigNum::from_str("4297335855076405549984762107357340353710961362827714602593664756444266171064205216346522768823250120303623604225587571870184652242261180887946024863938702");
    if((a1 / a2).to_str() != "7674")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("1406023525462672220032143449650905179649318394600328214350643968509039452262194489096792343713292524536257553210317623553993077406814140737744576793626333327158498822625353756853");
    a2 = BigNum::from_str("9389527975068653414940913774197590516143724957539021888437469298622867798173035348863350472506056783077593982785537190973701878738128893989732338246953975");
    if((a1 / a2).to_str() != "149743792147591082429786")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("162325207586383776037068064357093304072806937619139784955166908734519486714796133445034847292100645250012461793153262895692568596329768080359175149965832915203494124855767441");
    a2 = BigNum::from_str("2982675463750911405360128521789511852516957281080235476958424358658279672634845027087458740453785203041750333734092150389064134856670164069001731646194682");
    if((a1 / a2).to_str() != "54422685122520539227")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("28406628797707955995815052884548635744820284774220861234135796828655843799592379678843329472471197893193693961586502089274018653748177589017262833341408298557082536405510");
    a2 = BigNum::from_str("9567326181308220727361290616752974142380415557446886949840117011674935413844087654409689311819993696238141395105292690379052364056051647784202019250536183");
    if((a1 / a2).to_str() != "2969129332415389")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("9459081073786876289216900053845114553928989905892131755994589636244634831873848043316806757504408429714943571506799071377618385257817783215909483442247877055030968833654934226751484420726086699294069");
    a2 = BigNum::from_str("5772899943243933443904155944962568282392683570718074506871431120646917002920023468242181594329947289874919729311960259106405202102248147086527668542110533");
    if((a1 / a2).to_str() != "1638531962580939460539944423229076288274702249")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("3100185100597366064748662090482912075111876510730530889507830250332388627598418901612351563848569936554573758664846638405133649144419656073593633715383091084856684946946233433294411158998171727381750");
    a2 = BigNum::from_str("7537053195489956522668750816648250775250435895223900059443643062916822860446232679087431612187673459218060442064325735875804314212020049549693899532073941");
    if((a1 / a2).to_str() != "411325888273213157658585884811523506233065568")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("772157899343562252899864206788643957446720221905553696238474062833319963418890439445251424122210815667943154583964283264241962263292022957040703582083059342255854975831");
    a2 = BigNum::from_str("6040781453295728720484119700024161671061874525722207522593691768445439330792085784020091336349114391525750452903326494796780293372494958580429880100146047");
    if((a1 / a2).to_str() != "127824173960521")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("397513230399559949689590534504093815718001069980625226906799993199630491470789947703452188316065138382555474411533873062773180234979970974610350360032862341619923217933060544738307401");
    a2 = BigNum::from_str("11783408138679065627567110124296246737913215075289137752252659252262636834673471249511117576779812567093483503399021294172268041828940472292028182623948962");
    if((a1 / a2).to_str() != "33734996337326364213118274790")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("357209309458585028447962218468933934697313008791374337746373884350227322985607700649370367980645612001318415510666279249123810468677144878674903318721272215521027226376273724980841082513912");
    a2 = BigNum::from_str("7224315291256156576545632546661428528414578686098752649633806172375720292975838691900473612131719281411922546838123161062417412410829099603493345567023054");
    if((a1 / a2).to_str() != "49445420784849748431869325977425895")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("492097214478617209967569146521941529315935539780388267126694869870884349564214474164009978044322841223452191821019144175726109650664057557665409064669196382574452259960860435452420429013357");
    a2 = BigNum::from_str("5260205136822507602737924419068236431453331954745661459256667764703188199687424787475023336360103888957068665432547325915518228730097228168908306379961692");
    if((a1 / a2).to_str() != "93550955082309709787898914427543494")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("8364954466021607278495687816223703431853402475440734547923073956899157115097288187386553769520465143463574460835759745734987411036170243267168764499420565563125190035810140865386810153150810586576367625347");
    a2 = BigNum::from_str("5909543146639975529284163174106786933577656187795998860501901515001674187441646072971739140712162320573847046793429993751694155669651644764273982166569533");
    if((a1 / a2).to_str() != "1415499347149655675701567928880065952540079769500583")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("3202722523099087292659641885092803042462594895484515221640767641360301907743863931652114724429918799004158896969044844398200267219279748539391652080938372225966229367985418332798880295655024651982238902013576898");
    a2 = BigNum::from_str("910845344941899464582626283969579145694982016217593486139576431317477465625720932872686201736758405306167620043635599531465011879808199905354872831279132");
    if((a1 / a2).to_str() != "3516208916128764881952672695810314739198138115710442034078")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("900647993602261552857081667148097524823204745411353074691976482871439525924526108778760938916925068340028098700228948559209237733483754035118932061590772047593664331157890110105233722824577238545");
    a2 = BigNum::from_str("10247155920082044875833463896600775377966224464483039947280675447705134763488570696559645203408971158679872768909687725417731653632733547088906717623573487");
    if((a1 / a2).to_str() != "87892484570982347741397573964893231741481")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("13554999881203811369684965712658296432166672580873016873311806655800115123877343109647306762669265054250152268634836297950706011232976178827011582557932127449712082485059837544205723063409816535967804481");
    a2 = BigNum::from_str("3012822930078012298458028449279116687565446302324439925199941430844367453464767265217865999224825620386074089112704542597824811436850165764839746932337702");
    if((a1 / a2).to_str() != "4499102733811451051463397840345043798552682684008")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("516596641099419228331003923559532770706133418192522133584323672242150579890469354273890564523008964682111499356269523828925091866954793658309745036895325438763");
    a2 = BigNum::from_str("7274545868312640501525624927374788292366186611924840465203161654819894981067328955972978638911930106910614598075809607944084175021148786795691827842985522");
    if((a1 / a2).to_str() != "71014")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("20697387553638989889983372322004664902083966872296630194086979739478753169544951309943881897745953235622017950840361119708973618819071390034659619439337015475314380914083300990803113286314424342202259");
    a2 = BigNum::from_str("1205043780904259621099700358509838671745583630236055407170674377917646619541637881744687511698563373037844022711070216480920259592795779685563893705995994");
    if((a1 / a2).to_str() != "17175631194169360497587558520863295166773896056")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("4198830873960285675711208728118927628821757671334017485090252046802239262010836344643460670061233893607938571235649570686819654925512988419910028388210500798258130644722444461920417976801975580497");
    a2 = BigNum::from_str("5039076439377038896299025769453315991836769831571461431848475668780825772277644720524855643216760715476063877715122166393751055107098695262803158835421211");
    if((a1 / a2).to_str() != "833254054482922378759390633007609747251951")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("283241268038029499714614390312930482888946217413827309215309951995976746638472174517937091255495454536036639806908657297559903319792064055387002054845462362057295906682590625298098102247005709164011971321");
    a2 = BigNum::from_str("7348150152822346192768453721613157096321410654435812509282279878799949427641761386714719231691932882768371527102601543386867393137226830402952775215927323");
    if((a1 / a2).to_str() != "38545928178840976197572160961638249012944695388499")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("360032055932781094436219269916586420447751119152757708658555498603286379972444894985165296769950340708125721856208603839151412689535095967665679363309065025908143526");
    a2 = BigNum::from_str("504705373115845507093167452981509051985661936456347464472542918667183536602613601388395894809247169109360852410764523086117176914934255689062353469174516");
    if((a1 / a2).to_str() != "713350947128")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("34786280110390755534258907987341922327250911935479667788872495730519770399601422709964282038631640249560637284043318569982044890761070958279617623150652312643582440");
    a2 = BigNum::from_str("9074490621932416713194991119769357381595835047426243601143826094016974583318422046391250984870288481187989745704625406213285732500738593587558593796952910");
    if((a1 / a2).to_str() != "3833414079")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("577726054500754395604996027489735735695604603709478368693187798981218384534407609630748416312615282658682348840202142791080197507521260371261512811715985793314226431782184380950167418075016497474840772923951800");
    a2 = BigNum::from_str("4442320510528729134051455665696348089947705541856011834626595147850241024916176615265287604820141550334182538660673900938461952525217490572391604429750076");
    if((a1 / a2).to_str() != "130050511468384099393442549825454776895463790692222243034")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("9141643202568559642974127862093801195960516250065598846742000041649797966520018571065652073216661619211156160034099768791502161305602042552860298038429553805400277583946345334493049645751365111829380583293358397438222559815");
    a2 = BigNum::from_str("554078576174149087335329007485614108241298791237253370729142267697575772478301377277008001780436784015334165202606410320224227427084853088352404685017463");
    if((a1 / a2).to_str() != "16498820917586434596358432004372640787420552667947935661443485574844205")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("23214058213379707418489101322236236715397079138110973344192785049316730922123221409097897589175817607705536710986257495641799902928513325109102940954207215196481627239421332418774442491073298693136221283656699483473940681987");
    a2 = BigNum::from_str("6893346006268223506632011320809569356934877435894418974676717772364394757118205560783858789013639988262203835047347548369188658866604345938107421842825136");
    if((a1 / a2).to_str() != "3367603801154158533616518182293463893040728661506674393845546083138719")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("2071854786162585620282264896031096010932116456817431145472444046158478304563411657235412388151221473027616364154141860801212757405979122210762704856321801683942613997138357355956020611760361700");
    a2 = BigNum::from_str("12105949264692884245734820549614178344186134470280180153656029220585261864731244069659056796007049666223335506393536799124970489132124810089584977690624590");
    if((a1 / a2).to_str() != "171143521326755410941508700380176296095")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("23187601938156882413589432950066967229938772387459065505666070342307939191516852490870318645409117798099560141406339013582266604321740843877696204650519258802147144068016638889740180489099161608785779958002256913567767966829199552");
    a2 = BigNum::from_str("7871896666396960340215775917748116315741981370346280480808424047198606177697292982059652464483842682568842882960668146091635760652773338166900361150007273");
    if((a1 / a2).to_str() != "2945618180830371791669201468531490188598245839163987444797620393751007472343")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("1062605579472822794126443160346655694554420175869715842782916997664534768803011443203926516683511085403546605760674716761040148574094247345004667255832980316067841740500104553433603130714051");
    a2 = BigNum::from_str("8515189484323207365719933324609627694053151253705474989463201741039163857614940497511968819492171043424541209649463261322673805857715875552630184573291712");
    if((a1 / a2).to_str() != "124789422646333436960451124513506349")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("29541161891921389538084507236760055002463745046656826583025813160130534181878402684502776753791090215485891679505687670029578216154973089143507784211967237218054072364446206324429209175964948179876020219482368385622");
    a2 = BigNum::from_str("2764179101589755737065521606575134160545612801748980698524640848181920644189859420846813857193068508508999715416773385482941855051885966822514296237155900");
    if((a1 / a2).to_str() != "10687137412670348141871214631304323899953901497952523201335489")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("71408497468828220281673952597863524795013943569615646578711366678325744071857369918885626695009546564839840639368177560312176906019199761457051206329620519067113688461144010769756382854175499089801123270701488");
    a2 = BigNum::from_str("6638773293487286610057211638922554902975316554568566874944843710919040189084383063317823938396805484119860815776164072205108812393878050114324736652246004");
    if((a1 / a2).to_str() != "10756278955764430495441197310274214963188571608460876347")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("866215327860811713374255023847225198630139223267678077672933966385150178226860018625335453350442240714482818462294568948754046909288159853561658996579595725976388153150919586666040008199");
    a2 = BigNum::from_str("7002268299748751079248658395473017195170346896645379309452205321654601920201592702989823675155484445706931671906741583010768405527743795265166318609036113");
    if((a1 / a2).to_str() != "123704961132650751378723975180110")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("146728266303048353258898768488023999638793795588475347053621630172050010235824054738942972477968135935819384102719023719083105943421053340067291174971545577233659055340018857312303284409176436367697859282320935279019040");
    a2 = BigNum::from_str("12469185112828587542644956353070309056752155733714903317107205211244824336575413569643294985084918520495397982374930468046895253480653381952111455973728846");
    if((a1 / a2).to_str() != "11767269871716869578882939334589788238634135637236568063948473590")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("56642131646181725123617722111488671567974270577304972345640185333494407982845081315449212577321912241443516850769172907907357663741389557786531413995824405964360764007710884053037756049542060949403178732739");
    a2 = BigNum::from_str("6799992046614663142013437721281879872588992425110835048315419495336765289579156026788379515450405605420618340520115682774291754826512115577932536028743354");
    if((a1 / a2).to_str() != "8329734984672619431149198634443858273317507767492432")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("34078917012211272701639377261917345289081405145877927472930894210873757650515839744954576077431288153029269557613688888234339070705204062880427930446784464496787028017464846219565136052717575");
    a2 = BigNum::from_str("11760355479208802730279883748986476827354006140660997575283540909884404149072125007083916744888948369503123741235041739328728409860703593314185085663905666");
    if((a1 / a2).to_str() != "2897779499306766527242917697994379745")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("12106922969797957468947833539939562134676616334914416188095412050641341709287456171746780920629614095751786919059918168842063052289463249397844339719218704138844");
    a2 = BigNum::from_str("1369305110157626658857426817126905274483742123394679265159929554534372229484027266596478419538206347822974230044222811307908486829940581216544543190283606");
    if((a1 / a2).to_str() != "8841654")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("41282119166793175614280454719449344182585370341799179091262962589806704227478740383183173791333143255718877958878838298471472487525864520097049601562543494287571315586536224900252935167399011534295664326196311797003161783092018");
    a2 = BigNum::from_str("9687040015234146903546116906498563963251621512321616249577780312802475925489501434587922987265285085500768034234229219604393279300768147644759428615294153");
    if((a1 / a2).to_str() != "4261582392750685803047261366600435912762452307635329950617929435122687478")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("4891896603626333989470863779274062763403457587194434999231220544714623997431995063467411304735639735554539551224341566389846670818431219744295524874619976917453779731903194709390438673566946");
    a2 = BigNum::from_str("2265369668190372237340710404404454876191668965298862417392640096335924519940516410105087940222768684785549691494892081831711844586423910057075801013137918");
    if((a1 / a2).to_str() != "2159425312485131835605961036020993506")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("16302928430450494909693080503512066564660697265841902780166950749229131292396639586290558140580439331698507941277953779091316569133604298964277486157558532449981646172677485627494893906013627");
    a2 = BigNum::from_str("9625666589413882381873115875111533866813247716057519071785600227013677763040089426996663104969543799750079973149668395336766837656051692140195591655678230");
    if((a1 / a2).to_str() != "1693693447514599451650802333187291519")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("1015506128082289037040541871309693280901660827336705139661009224835185877152192838133340212403302487226479890423423162779521402385241140612234391969739508144909933605594695678985547770967381998165018687842112315933348643516");
    a2 = BigNum::from_str("8144441315905547268092511397688971180189934640354573091845904748511445311698819361880928322694522611668764630247231085819089399976970250552863330185222889");
    if((a1 / a2).to_str() != "124687021330618924781092514828699129278043300604453235417328857087535")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("16536846210296511177580129708661291522147159977573633665029784871270363494594959659681527641568459315429999634331536362368510160876146140540269805100789236951544334503054028259077005361175057920743704120278280");
    a2 = BigNum::from_str("4322534080855063468586339340820956484232874683994351514025006539792335840348041693012003245201756140830193269623858061103628886384581870471491379591883345");
    if((a1 / a2).to_str() != "3825729514439194341549441386519847761286127948789135463")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("4100996341482645192922960532997113522147803346088933440153515848301293283160146992456488274733354804189645562371931843689258463231024501804235038017524005912088643036526180654323028982");
    a2 = BigNum::from_str("5842891002128431495823971976992905071950891690372215194556769865919759061127916856737964528262690264902507230465859298733011308257432920288745572077551");
    if((a1 / a2).to_str() != "701877947062292632905749295437036")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("30207114233108169212280726907593769992456979436958577725080590907853927776744295667811251046249467546695509826625534075971872449453027214710151155030436479095425432825842245959484707988909");
    a2 = BigNum::from_str("376327602266321809597238309925590480725981352630823804294071823638931459877869322711173802881483205507086374591659642737032077094234602135895669350147820");
    if((a1 % a2).to_str() != "186173357446611219021146826868644481494007238525540964227578174366251843991389477757465146048003804600943589418870559192844500380042104467896617421397869")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("1602521485889613044964049604681911480508699951986500938158369394128051487635577523888975697032866476553086676547652464499639009867674656657554060936554504010260530961040255022593613542259658652567125011657501791628148907");
    a2 = BigNum::from_str("215617350752396209434139498333282910619573341146092668911785782139925072290920367419419715093114598654623774087188082060125710481562809403654966555196580");
    if((a1 % a2).to_str() != "136235850698265732373631749493035274523758816055630246602168547066479199745306117645358497291775339341648885928803118654793693352674546445085749785032147")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("190210183278857725305387434635830295907594185603579524618621359217086353051604732326331587056781088513110397456926565467417461414106730253884671971584148973860312023066953057590340474108037400504192970494386957");
    a2 = BigNum::from_str("2460989460912191688850403769756009380128391228138476560612285536456752406482521537497674971726924231063195321977920042224300325023619590720366803417046240");
    if((a1 % a2).to_str() != "1989801962742271580409916055043553845899987362375019560763299128463034468539423078217146398423695135065646682824591386273493999050237873893078955873595597")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("2921697946487978089001118595581627000108208897975791952476561463072065891369940696082238377384060000946051690197742644399839285514641907388729863421368113501676585682899387413096072903556815988314757780392223094718");
    a2 = BigNum::from_str("8226088696230004854202813876277796047932416143623169245084546256156936915507472640034784556392055650616076840945835384199985205583980235338724293360270215");
    if((a1 % a2).to_str() != "5345940069652656200426356203822747193520268969104043089843328355056338450244364217988842439445227036773515872442035564452666338676998805576093643918444718")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("1005045403550602735756616697018439292206782517450514751430464598793603923072791563094955280269021337464964808694985623578154763957989503201702178062758269966367");
    a2 = BigNum::from_str("10788777108790946029299752172016340442942730094621689488611455169784277770865294117224595292973704670877070084247804747813120066987393495013582560588282753");
    if((a1 % a2).to_str() != "6083204073367451168983682085081904009552755936645429375880997179743050064224310780881156762905144740467926797124490875750997711874780216881048596201827899")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("235907330795808484299298729846312463721566752235837764025330705614923254787478594845232090037850241534318290521736576926858999297878443787571040003828722031484421714106617313645253498932110381821463956557419061445741");
    a2 = BigNum::from_str("11602506806993948365181627067529923822183324995536463871317359257902912873849930615990446185961162425509628942683526101892289061918424474357182129135460643");
    if((a1 % a2).to_str() != "11171679581548942442935858015716976471281704547528202052522964561315942661899409828971536672320185077915180819229682281404758410790860960592702101890499554")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("140074238263826798943851963358893424683419962581085581263861788506020579831097499333798623952102993803164048028103250945210969843801597324133016206953541148803001818241965907404760900");
    a2 = BigNum::from_str("10466744447950416724958760379812936674741490318817226324825278291353759904010286001583090030882371090682889336215153437976147592427496026924395719508058268");
    if((a1 % a2).to_str() != "337145551045485454563894891260413923586294335835586423773822859923422284323865901545737320443903325796505723869612663060405999908704870337503761649640608")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("275346880708774374553589274783172648134377622562507284430125748593103329792553622736484236383586331329530135669838466278190799381462660729095087605449219069638206729377873780759662181671644237983257691294027799804717501");
    a2 = BigNum::from_str("8072223637643666526705122559337749196877773052624310620267044120153582228216335859709663759613829675854188359674420280101886308475413749014496877836617998");
    if((a1 % a2).to_str() != "5909283017793422831882974026967083849446725128810371780016758411247755920412306499867379426561555290698364919720427330018942679430405419413925014220693")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("2390228095774799030067499844692603743079840501227989186225738974873658088019654178484830550915523369689222616659430421682549821950485040684514299699760906644865718876828059020552732152541881117874695528009568097459340964766");
    a2 = BigNum::from_str("10705332313927719959265126388590851144936797637749107645467910645615293093653974788171990002628037095061478077946376046705666598291574244562621545512336107");
    if((a1 % a2).to_str() != "6674779457176901746721853411836439349912342914236625624084753118065743698861481469652463212204277998129886498888015505282395911261322821589694657881034648")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("890224855682697636035378972096811053256986544473666810544685854279238769883173090491813415897437412371064055628820576439482826684390642799696304116077091455743198425366578552266256030235659437360562788");
    a2 = BigNum::from_str("10288983434514176395609904435579972262092978271441650917320955559206819488617377814647916496031358112904062253170041992506728116540221985701189623530237848");
    if((a1 % a2).to_str() != "20520411040831733211809974470604961744469757101245137413047452362581807227221690544210960919137391926977216902836250953554109667879696845860754518879956")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("54096343402963754944468860613040457329792768895559109234218853254849481710343274222363465240051970274637796930851159227730070078718954410208532879395850860734614576609263");
    a2 = BigNum::from_str("6281131103744184872717197239641074452880700756942862433841021716711416098505836996552000162400183626208939438380232868386885085073067780630520330359748221");
    if((a1 % a2).to_str() != "352827812990691340658129303646190937930813305318979686254906827193074777147688851550772360844956959482630441551511121676598220084594537662462776879145921")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("29724993280734837556786539135811525046277037818431278005969630929994686896700937930934130263623653477238132298060899329859427641400700075947412342204486866706630270160083");
    a2 = BigNum::from_str("2118195609179823349330063068441972027595535396624189744214159884020150629378672787249107745855865849774778911126162722183002077856177709966887139058939332");
    if((a1 % a2).to_str() != "1481950604964835596524588084768424482128741898729339315529881130213821968799749002470053342622453234259817101623871576458875020036311115454462311482326207")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("632647737518474431182454129138418918853618671569223635663337818815015233387640779359673704227817942745875492780115377985000051043843299014672709968957449028494396635118632932946716841199915965408752344050118288797");
    a2 = BigNum::from_str("9089682146991615844776130325270933227638259939386535052943614272416779276445174831174986138688938256476532744714844716225788152218522856186707110632820363");
    if((a1 % a2).to_str() != "4800016607802407416334702975366784043858083730765820040667851888428584150429326104123546391873062028970149237374948524058242951075290397520990549220895781")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("1829705063014759999308749940816838148925789776925795661557635367070698518391923582990536388647926021570454744997426589462390521768661208290655444650908566847643767348039567");
    a2 = BigNum::from_str("4557876011751066460293810252775641880604180285103930411489614252032809874687438905222052384511855247176072127519473579872698927869130540398813789335953671");
    if((a1 % a2).to_str() != "4297884784960360474608752286049885954681135918814423605970416086951398490424260971778731959305982164727708668384764243691527099043102211465822008527365869")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("15522886262988433145060794072055779295112973469179064981049579801382401600468211761733918468071973569977792054346053305607976146279913895678282249948814775199019979600");
    a2 = BigNum::from_str("2104561097547267552266205801698603501467822354403677981124575198020116467261151388101864960630748245550734164449703576579549506467376862898326427676104057");
    if((a1 % a2).to_str() != "1364738670582090634660450763176568421072185962776481233814842691265210873185741529453406745263295696591397754011411102251899422930161670247091042256206040")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("43438737535555129298697078590201789822679300546707600800127724979622766910957658553482978537376186303626420209588753462710935686637760668417978366832279674325714178394591955519630");
    a2 = BigNum::from_str("7830186389087022203242073834070484028974649120116783308665207533511500903296208859901131730203085076275981384112390451053320568053053993348106237159493491");
    if((a1 % a2).to_str() != "5424838391472350003037822637503351176751937451411382120729542814159700098860911305847827015307631596988465119193173703049641479830630228611120160249693792")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("481866165207268534755265232360401022093326533204033077914431478625058993536678822317081520921185048149697476639490799771447018371622263839137554325406500105290091421609131975704485098550769082812");
    a2 = BigNum::from_str("1274751476990637774846347998769086832240185552384749124757563231202160796684386627137078085013057905160211791129051781867066829377257732745182953665313636");
    if((a1 % a2).to_str() != "42534011130342322020096118269503691417877044158411403979662680168822657982490881914548146702962181205470964828411794031587709261533266514407035064933356")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("2685595965469213131744066616449565472665208705404427120485839492856464171583820345266746131779528688201989134721361498067235860368814190715611050369065497644326461357383427720005697936662104798485788302370663070683171421476");
    a2 = BigNum::from_str("2895308140240738340445531049384202227256055343719748374406169626760490259420879780199878773895486220536079932529500155398131537434572090052432800882909348");
    if((a1 % a2).to_str() != "671465669088802425321821076909836275679764617015356897526078314750310666842705277030687924354149438276615325840438372218254631322243380308667980901669432")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("3876023472598537675838181683989680863817207471716648431369821343813328226315742529771985864803967570686285153864373779787006837377021716147693173278519962311031343947057965611475338018979250848684804798710868113");
    a2 = BigNum::from_str("7454790122534436622490680035830780520761716905019870263746516082705425490756249730812977840709960602269121856320715769098051280382339735387327254832771713");
    if((a1 % a2).to_str() != "4687066083309861800782565218847188072123451131600447644281073499357286881550906946465104254736743027192433565065162242452275454399605324620247284637983996")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("1040790163582979793534984379580132115598111495898510009360923636749110082317412043808585699732398668248385581573831093008055837066634388363404425319073790959495431201062554554146810880865");
    a2 = BigNum::from_str("7195297246608408446953492929729235932988909379217137027211524700868973234892689146090593295352272756221556608928898318368469140241640170858765082728024634");
    if((a1 % a2).to_str() != "6814815358587733771047672592084985480127103972562097440070248665720818446469751289909052423458377970368551393102804341264179658120851361420364058387539049")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("16242575874628243711353584672194121721555463971645682402754129592390073669076456838267295554251664642739355397214990327346523635981135908692829422714230882788365390106565872541147");
    a2 = BigNum::from_str("440649321531852939187474161927789670542957853499987492646636978175275868044166497615077143298748372024504044683688315247463338804182471555330751459655834");
    if((a1 % a2).to_str() != "399537918716097538787272148850379151702141923100227608212459217335338144563040697004015316863444390647899096226201646762652285912215165030584236190966235")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("537331308626463986940121426524516399757066942284155706942020279126058999077784354500026147504209784100182385207621562937568075089450364995639981177020869835757996038423271669824824251139730");
    a2 = BigNum::from_str("8330434202354068464868451150122702224758500641958950207488162286164780084009192156655392543499350888296809636113899251429056017796499804410387525153470668");
    if((a1 % a2).to_str() != "3533762513497476203601241398438111024455451482484803541275713787399466439434141494083479346950498323220357550326888869537656844714563241586479590756910634")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("425083364780521207434477648748639044402735648676161998946386080957324971615434703949091041947655521975580168511185620244888168033704452447117376151718196586536534225183445468184465049018910745320449933808245773136014444534665841983");
    a2 = BigNum::from_str("9629593408196814974445958980123171272117784445814179793646261844783954418319666194831068245562617930454958228996365841147512530203971946121977934674461698");
    if((a1 % a2).to_str() != "9491725173579527059616259808202845123281418119501516849404704324813633203356772096757522230338218547191938337685629560328237245743042799097694546032559665")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("2304090130969185839142565008159900899269732170304537162537796570795420547596787664735499327162325385940496357551397777080994390589020040070817359476264797632155365227940691284087123473076187970342692");
    a2 = BigNum::from_str("8927808619427706826132055079913351214515245922612338445229440627731512675096931122561940778002450926580443232921939583318774144678201412647314024658351804");
    if((a1 % a2).to_str() != "2153427394553989588431638186209262241594159932168821147175389706734100046367249109099882200394751751613458402686782791383863797225248728061405413530785180")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("15396341021777651007622749718350246843233080144794878897879221713176308278748828404775123463899555720151735762908400763923845004340460951672801875797010875867582380559669260358971891559792995665895908854276987494633277390");
    a2 = BigNum::from_str("11390812946945012082543547042337352236509418338604538841560490436432844879189500845414613657557064341403480131732158306740912877343830272901434421081946431");
    if((a1 % a2).to_str() != "3883270149847485602045101425144715997810849067361445454487081436854581278257917895255248821002852133221200365320785594201110085757936777154150362639495712")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("7401790928895568823773416730664875727773812000708066472756793845060171287876818017025536166010219487545350032822765651255990952021690142100681292198077468620515249219425100292913556042867442959326578647");
    a2 = BigNum::from_str("12521295285903376997207239030642030113210503266229506590908873464525933971419374622545900693370082510220108035935175182316122512877123206216400406132924313");
    if((a1 % a2).to_str() != "6969993597988980621138417119385546438753921774330168293191067197617806687163951996372500608435247142573501284283434614215150182328717139245777580635866332")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("57044717398262234978372494713366754722333426668538952348554528840869195314950142825793594684101922749051613708769952234445555877403249944752388480229401893128938475584927680053196790415136415391243993201690");
    a2 = BigNum::from_str("2042668809846016702523126175855668925778358884728346343457596937475310525231412545769335742601467834017427336479970971537027763304433987598641903015534042");
    if((a1 % a2).to_str() != "791757197339298217260208528274105503130250448645296629725941532214827646139444918929181554328238269755880389005954370553139022566732059509421697651012384")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("96220949566487900629548944446714201420214561046690441659478747512227978275970489509134620641618014899568359511685787978301913770000414943425491589091390183364307442076126971298761063162440635004743");
    a2 = BigNum::from_str("7469904500223210075959549145835852400048124344610225802769227400201251270762473659166001323334632883604509473300486972998801365371717769880957956795283712");
    if((a1 % a2).to_str() != "3381573064721068265175841780299156487333677920853078627000405576463190248844701985694490718185073423695205497038852586307985765463235508799032388289296711")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("900679532608818645657340738669185620755948396379677926007540432219483138282014114471944895752183778536053768911141633326956555532655311660479267656866354976674197324338626");
    a2 = BigNum::from_str("2922853196298623109691684213492406472680342813644070733220413583907863099214080078041576972748138927516060965130501366307069382751807304201453391599366873");
    if((a1 % a2).to_str() != "148776706149048004089638469857805393357850030030226788601134095348723307728269702957211883279661953273094541135771892108929336328594234579243707784629001")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("13539959442287060691556569059478813217462170160018179168491456839180547868321868621541924619465776843730970543318396457030470223319172852598339664157342941521909313997050572266642371726967533781692491846704447061121510");
    a2 = BigNum::from_str("7271570851422917857585954892333561322884958727958178854153620698808760381037010991273318044659022067748743910984581208644624825354429942790313116037241434");
    if((a1 % a2).to_str() != "2781254137024044486442839635159918086891303372311769697369870362870699475780884504549656209772636360486275375308523195562495101060408355579306909552908712")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("1957422395707097648365194442957715053426045237757234368649895833432941537865511185320218127688089211780770859172456158811871225933259515344958671378667601286367000046200571733037975149853");
    a2 = BigNum::from_str("11128852059995528186797990417755234544906175722030002653814893552828037742899910567507568981939092961638266394299054692580715124936735585361393582320923085");
    if((a1 % a2).to_str() != "56170074693012830394730853804920079063840443927630261778136484640077932907940940723180868510942107784342851121380761111390074321374277142982666731543998")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("1629993230918209854036783588579810217584949316946296251147806716798598812678020167495015920415260337237883669973605872805788783900410155061550741709257646562130074930590595");
    a2 = BigNum::from_str("10709748126140555503081109158157210183476135958691708520319905013999685690974375703005856296374502422084615853739417348939935542865848716139437542508900991");
    if((a1 % a2).to_str() != "7304847040378313112243531156480435857807759551039020000682362522315357069233047185542506025287610110538768030276413206713110338633221317770491737652607039")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("148075569145749491349022506601680904992438995735409156339115072267765783539848914551352750428733139264010573116843522731972827192898869016417967336301604173818841");
    a2 = BigNum::from_str("6280630271121610925408521640206090911320923232050614708569106770270987890907874670535077788826538840672552357467670410548532393812996012611476168661191338");
    if((a1 % a2).to_str() != "649658359772025927359366553141499328392499164334258932319560405064416425619247644326885960266107471523598547784836467977676653127266919317957268178660293")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("126432463622883959688012111331721024878110666780091579920332881606309176865699503640187316644642207279372260850849774115219870112486560343591081973414992892804388803176848167560053280124322757205711106011434");
    a2 = BigNum::from_str("2604484898556346215749860115205467903149394928964418357217616520992216192110054905075446315371077733129551236489542410744805013992063650370478451442545798");
    if((a1 % a2).to_str() != "2330482004550821259921957979051078223389027332218696452758863909897022333063689698804226938075059483602703967081369751490336825257970047093543184987998882")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("1855996544449114891703591524102322460274906401133885220602652062386720065670208185949091165142632074006590597506837799246143969104871005130390893572197325432376587103508350433997659");
    a2 = BigNum::from_str("6869663730308730147104889010065413204463027510820773466636104976639065684953782546075327313484082883925459110853158431548730949255014288752243671395732409");
    if((a1 % a2).to_str() != "5576327874543073508104471789822690477222118377350077324054599864106499191308501637008733154712481655718749504801911001175922270913719112776540059820238761")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("14099256437580301160733607908566499446330599136513308054739172774487220700416046550827748139528778618284716837132947661341833976273109364419432459042915983400747315034627590925582156860416322836386242531511229968148214");
    a2 = BigNum::from_str("12188352142642748993660743332118966516982243470366087175679158051690616528585040568303537320054815021084231717475764925503675037496654999608843620880557082");
    if((a1 % a2).to_str() != "10010917300274677001319790286568381953455016688111030741623054235026535070777944765090486825581716835157433906006533481177706911818408134994547324963566848")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("44234416076965715034900598764974516581713778806617763783971487064072241903984229157600670714229476387840775557344999275600736055016506949756952845403524275819893054401221871234786897701459");
    a2 = BigNum::from_str("1274565882100198727593834827986637011722366948988782339508207215145664782063647974690611185848529920147321085403514126445076792753573381740722387944389957");
    if((a1 % a2).to_str() != "825129113492859742712512804262378868734747432080415613274555610250665898071243170808668902329234750677597484315765053331191831470682433791029999863703764")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("28082174977798792929278214375975908688613763773585568082536057520603616475998940818393866127250894328628775023945761794906085100680988995508627142236056535920403500076890225733977617662121203502649764173180532421137553726656");
    a2 = BigNum::from_str("10826117320249819578153018812275301468847969572570338093447301465254744236531357205601948906753370010293141243976697475355215598675323764119806144118869555");
    if((a1 % a2).to_str() != "6847598217858858893078074039694425462534695965739067337476186460117997172811950315893929028476606997375951427490017127373437585364331667388903745820201471")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("2453110532721489860106797019029827679826040066654713861136085508261666277550438253984131126207524586361602510476582509953174155141991595942440668998531052639151425466665404209821851611422698388376021104521795449981373445336");
    a2 = BigNum::from_str("9208998229276317028847881498110863049047952018922483771529083866720790164635055791870305691886393590347904310670164938245289665128757536331137990988895749");
    if((a1 % a2).to_str() != "6600319489628202346457985688990917923503653975296566862236505163091569436980129020317578232937720548474422974845665325106267039951490001635498239045472968")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("3487470336512075330301972747069231074849758189686669483349856320043636737179578756623928420508304368961190066549970810183941960776673473749548605742302880482746565532473892554191725314917894326");
    a2 = BigNum::from_str("4500557835398541612057469899013391567413870302951575682756832830968582719635096289137075325266079287399991636512122614976203095509596438640419427987686617");
    if((a1 % a2).to_str() != "4429189746282796755598707289152302219603290312060319025944166882388912888654502459577309019199055062133296055561656649316457878852151944375297786636010486")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("346824335402556389035975231456004683513805354005140317986964640714662723820732387519699870068120080538483093272257800177732881055137549174307452404160997011163352681546057068721144386025482324608144795872472241128131");
    a2 = BigNum::from_str("6453378797178760745467421973637420471929219467834933096618113446753300085861420838644484471525885638634793567290084386740740724845326442509968834827827481");
    if((a1 % a2).to_str() != "102254751902591044807532904916329636388888199111406295163105386225225020345130436981113449837424125422264261785495129143376687780108813000596117143612547")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("8108342126065858023039416876356896812084764762555138324532149890093630564840616451034406953773891583176280666602456394084710895057639250916991885387810096831823944452619218877259588117665787878");
    a2 = BigNum::from_str("8033068398375089356670895076467204196738121724962832905513726160262696851966029254389524334664358955754437187155017054224769737110119896214350171322482249");
    if((a1 % a2).to_str() != "7533686791088537349473962341157636287274602432186569640376612871207449891785460292205513104136494695748773242663054858949552805529416531559443525291957257")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("24139708381838458977877181015675811156178762426136036421703902517780661301957460111967752914525316659227329309335865404128720442307418705704030419341203496341570590642403316656280667617418158");
    a2 = BigNum::from_str("13022472540432393355271024191957168936506743767027207459616028685147632694168530282754875523943584885819630966322371585162263881875301285255648262884247899");
    if((a1 % a2).to_str() != "577509834395239332984122439326730991894887674778968039832336468020614994389165162759337972134541601672159003974569687377779305973828162566379011384434981")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("8462450546755033522710027332466806722739640868478050990971961790342006756045470104646090075146988570857359282083867043121488232630437481487579735388926329347877308693938307481153366294331802762038241021512357226338862453440");
    a2 = BigNum::from_str("1828028432408456593026838572678800500992742680786800117552927605715524433682711831802188211014520650853092981762860170335842520300832449938754929259860714");
    if((a1 % a2).to_str() != "1275308021129726043951416478895153352860738090342254918815899345379088746896493100174689847905505951265790202185825333873347630151460403810769638219990538")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("848310422312070839116805333171390361398371943492107704683159196017011137040915081092791159635707720215288604211489169202428596070475293233388068078764467216532278633202547869974155616985364248290688910");
    a2 = BigNum::from_str("1754191415285478197411533909396015889202711942295233921724247743192489499329089371447810694204769281775684502440907231747634440067266363880277325463229983");
    if((a1 % a2).to_str() != "470973520630302527223759144118558205818494112314428942426705645840197890421789660959013880217680622714076738082077071370928560150960758707583355667005942")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("6815779477774307036944520161740730404061061325893786820477834663644356120990550289999218759447498062383783004851554879707086892471406449163216251112791570183218520823739833604586034890772703350");
    a2 = BigNum::from_str("6547508777038645373164374731953645526662703801420304538059786209666883979404327201881561406932801058079372244771663750643711407769991996829282064996683941");
    if((a1 % a2).to_str() != "4675987660465827179575202856396569503232776518561343051203981390053042433688467702237817999362144881930078877678803388085131122711031972718207374619295117")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("10769108616564734227659466802218098831499068989837554814968818405673966842616578112221885521264180106640782833960211559635690818034007867469148955581663572014");
    a2 = BigNum::from_str("510250537142804614316293364891737462924999918423777049033086468499781365040786001257813360609659095222796557135624490009409890945071338189407954574123526");
    if((a1 % a2).to_str() != "271030165842842514095336177979676466945711503740195125528487986081133430789555675734545597324901963661495612856697987095069638277274981694074294786555784")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("8236778632724889518133179545588761904456078826827110407633950422667270281472492430452917082206423705394349201069649472940896459451674075279661752666320656085799203825");
    a2 = BigNum::from_str("9410229679875746811071469418277316004371128022221022422444549311723094579692880613158741732823209344302471460897343678624793118627162776988905402933620265");
    if((a1 % a2).to_str() != "6082293940741147656400713536794191062287081320626131446184401640109736965841189179094469760765392388476884331788636951314672698439731926727612384823755065")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("1299490063774261766416299283399355343746609800922834357383803642318335212642400691411696217618966314697984643571819984661461122421897659215338014593495962012392496497176684232592245465189854483870343551890931023898035841841822");
    a2 = BigNum::from_str("11417428730989708600445266683480919723510235527411556111229538619947404733369368888327935001880727217918648372677087972298390403772124820050783974917918890");
    if((a1 % a2).to_str() != "8482667137798292870890588247799606473965669662535065210600273930425368024691183127408460214043547644549284511654012759275892244738209238592622400679903792")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("340910962408132003657027675653771723864242741669102464143125884232213277178359017279567600805204256403661721930316383176843088456684097732490372376904611566969314337940815655");
    a2 = BigNum::from_str("10472537748584346674104178017490040953153331409765480253824240442010852355675018368558656786527738564104655693724577408181215908811067147731495740693744769");
    if((a1 % a2).to_str() != "9582531168186145076776970387327675429899489003822742493514698307294286592496672329271388703889951284243216502492604712548191385466705525791228690838748108")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("96343052885524960895082013926442426585992745473671149998055697339943833941978861232320710465666307723395532934918904188827641793186167848640269695741230306891291288122450283199020");
    a2 = BigNum::from_str("3643119456945453774321555289631371316198018696142240170050827764935614696536662257651279133631134576970431279575053029244934958916782368243472231369820842");
    if((a1 % a2).to_str() != "3507793498034464017728938414639924875793512794081732488139966853741643001453317766633021139760788230640991056582202561095580563474890259994690985301286184")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("62475249129704373623255166629611737402822072303172552551133694717545477512034671031894778358808421536775164908913256091126030803604706234569144149303963108786390964050132864843786688");
    a2 = BigNum::from_str("10787412073256160131139724485166056022688219863185915926086403163897803698637700114025691264090645227519931151417030664248162227161391423792250721858894100");
    if((a1 % a2).to_str() != "8992468598966082076537465635698794988088429529071276957635548848338803806787228954017960579903276426071314715894438822765488847180205777162854978458439088")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("11672708694938639178523025256905793956386077706467967804456924749450249652043849575593182864912172343951572686073801788751640191494595768783657268883762062768903160802043529200228");
    a2 = BigNum::from_str("10019370896481043526703547757678724092409288917210255549661838757151274412967094131988825903401866245655966402257649759914525645570840669374840626014819837");
    if((a1 % a2).to_str() != "4847410277241275106347060317247410957628338373868488293069854508753238913923849567698864270873273562385436191661781711994859444605589856491030894305985507")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("1372340807161784153128459422927054491127342664462775494680721147219023201408686195241405859676225810936227346530627324309273489390676871706132843411884593995437632979867911363705871283959606222");
    a2 = BigNum::from_str("11642103173127353629037650486551915232406471542366297399299488724280899701687924152035292576932803875056541480538950812726348597933304591622749523411252552");
    if((a1 % a2).to_str() != "9197215662195405943118381564027143602555022239815678015297682183496468920610577121876574083897339126354820077796955721435076551314912322440056957524132142")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("20248483574977400594290458918502345360163288105633263445336168986819589955187828190835135890362306958309792974808781193090447862821838328229885906797399273704");
    a2 = BigNum::from_str("1342185195937652571365301135651613332182543618647817061229608759280822687958365596130288553499370912286698595854479353764577265738209388795536877973594738");
    if((a1 % a2).to_str() != "277709061973902673525986062106630857435074712295259626291244309098884647924807613602772270797375552657957748105662198035231895211488860416565687749056236")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("43090855690399600534798133058843588154054857219159585820815735997521457626241270202121110241917353212925037536710198810165668655206749018090084397396637925647698171446209272368");
    a2 = BigNum::from_str("7903679787188236568527580155892939823240543178605853098945445977454905418834433181816010801267303343773279701655360253625090366672328830342485252548717589");
    if((a1 % a2).to_str() != "835044811964101289978754505955141124030492979759618281637242056277164463857560145881072062913927074420158154951910793118411665531519444038155517117403649")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("237951562357127865158115880950453060942815841574243933745119954578569597546139302077944879301844383317163590218370791031083074098740115583908126775597545376960290921731223817054052666339953164709353187583310520");
    a2 = BigNum::from_str("9662205322881632229402771225878700899508993907926627036569803628926602961266238413821665385696880154936640750377649089523359080894395511806050335487646005");
    if((a1 % a2).to_str() != "1814920760369732789637886524483289101535395329012456216254522428716236876808183140121665224460736577765843014404847117602159232599064545550917335350697140")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("19481493208347120562156821312737204169927936024878225703921646525083923114056438883416555096412770853133579927535614106838801055934840700926370107649199611791495137890284448307333783350555024045413133");
    a2 = BigNum::from_str("9599858351340687606954474265509321586205068060652495246665107563928243489179773390076055852834026102720910304390300438964786739937005503483782184961901236");
    if((a1 % a2).to_str() != "4913540249182779959652488662176165673722543669805881732106854042306410176812544326784527397694330733637486976144506943056510396657729607868019716181574657")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("1583235833873015724564986065826793783796164617847563828879954115248331522898997827250165666523699900989330643922628576391840587467981889911503143204164739175856420227146466979179092905892614505101550589841616185440690617");
    a2 = BigNum::from_str("13335088758883110838641215338764536105513005011945008921857043776816694932140229203508362246217075342787280525322442769553785016728017470651788048488754067");
    if((a1 % a2).to_str() != "10971615847140145133669500331727814837141736028430216311420747394574369435436814574580597318269915329346728411548132394630686366412470605950665225261659866")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("8404916774018944867307715225612124891591417479422776973294710635109911383545297955613744354017522572056057500551961087207120192379274098172448927909763116249366932914427019263509051659366219781400125541690535377521670048492250");
    a2 = BigNum::from_str("5204786016468889452833991511541495022330867499511844185582758272981340238986835124479893793757505266938613947736731112051394589922433071138557347105325397");
    if((a1 % a2).to_str() != "2275315271722003795675007167534825947038963629489839083596094791662740552005976262167660048818505561138231531517630068830637955627862942213205697603118538")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("10901503854966206715357561008607014528941977116851104958313762122923125178466287868049342240020710607509015652183480960542659253546085034035390819191017365214976350225068401315635691432872686520397103114902875509857312310");
    a2 = BigNum::from_str("4018273225052944566494210010537769644928982026627766962026618185744976736452374443545353933995072175886230199951134049916367833777734036929715543839189209");
    if((a1 % a2).to_str() != "3585268056285489242587207230761900562989181347941655971263841384840691947868329468685499923303587493633379197092166832403812803239556057848764192802620625")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("12532932220595709111130353573266079870873604668558310404422390653932460638178027741264850141691951080156058707952235134203758813984466468006486056437591542046223598350204846726893624536363107609243576229144683555796608589842");
    a2 = BigNum::from_str("8050178116491213196903277424249935544422449639357281914897186895155650950128323188679326536230750969567864324773435123422399776406066723465605038979127690");
    if((a1 % a2).to_str() != "4002500321725806847670130841181011917099223271625023589032824719873445372848663714964245691473521552954269350587300282874504129017398579819008588214479852")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("24116547555671739976856306675368958821635830219900077017227877901456028153222250587917311998101619834481970785480945479515007011920620511261129624319725757682424016845608615893301089422752912489833139782060");
    a2 = BigNum::from_str("9993576533247098362641416736160621598526646467135194987315644178237961764328117593278315160207316840606323219930154876442870362894506274303884651139496198");
    if((a1 % a2).to_str() != "3738132700236481099690352870904772790817842226092776718630530498139267447152446954879744830427749214675104220215787211408248388323799515865173220464350934")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("49083088877688003524850505654445753761982326657248440258153177453369555473018292809150499061688204412809857156185352523581004444678604235077532989570870573219872270355662023516436198613424425166");
    a2 = BigNum::from_str("9337712238712407404207136986644001648104641085461356089419128645088215660360652408581914996573640979806069759871373094463048747621129476346442752314446555");
    if((a1 % a2).to_str() != "610669609694644864595899857529512654167609522871495347743208569458992903124897405071667497708123238705222611652643977692021076814047485195541605683609336")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("74104371911955772637476335843870587089483711655795627773191626189321933943283939448035744985923325905746067944384838122474961507884735392424390011086947497005208204506193377534155717458633690271758118419558497266872974959177");
    a2 = BigNum::from_str("1940868724893906764822469285779521842795182538907330660353513335265473807382948730037154948927315183571035604576048283348531851555103626643691542507031842");
    if((a1 % a2).to_str() != "1893241902472889676428572539198466563287064386757309969739046569344593154359888978586142809526101653169598959427671501843188665163688246654664664926361993")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("56528548976911617999093474585897904118140622524750069315410166693217775785507549401830294523781976006492670451943800255833715875651883136606210080520776071003875266066403538389994738812");
    a2 = BigNum::from_str("8984212089639343362316192811813708560859226613624883774930726179331162670841646710604173304127022375976321470424384212841377557113832809229641762074656035");
    if((a1 % a2).to_str() != "2531657915476012996919337023869454238623558565493929042723291873980738988876430709028361686918369741177595016269639296311650516204546683288184475386841197")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("865394805706234228935118745963494193515561951448513230392150367380976625895894378971536259750203625243763389138804687029591340053218737609438506058589533334174140852726048944069258893138711391873322264559157469305825757034332198");
    a2 = BigNum::from_str("2598267625662189467484217220506879760324697096742689506073624845455230295784315854334757989589146173247097347463432164330268185780319299156413791911049181");
    if((a1 % a2).to_str() != "1121259144832738371786554218249650660693943737183799963129693673752407224623118694457764639156672705849496724743763306672743026699185293861981805851201124")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("38491048157918383541094841797767341825784065324566655442263713148301712666287190024346817484902659661896264617621199039710732705776825420114736770839449395632061785700274263124120078670575033184483131307956800");
    a2 = BigNum::from_str("13004632997349106681104594008071721863818903409628181967873112057879849931131759957437005641959241748166174064146789863623875105013794737122868366187325199");
    if((a1 % a2).to_str() != "6111889344645469586251491341962437075055002785475465442897599924458889412301543630156108559759970447495922186233545079863214077516831823318035213217916972")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("75435730642350351716381924934693140001847648584883646679663798880289943423096081874142392781910340965470641242883800883140670569455376787948231042132259393987486749475188776054868002941436263290425143542334151827236323554");
    a2 = BigNum::from_str("3462709152696410277160470076584508715889725135375761310363445300218605736442544316680406720414746180340819141337362378269433628106292544081718573728317982");
    if((a1 % a2).to_str() != "2220630519403626350006416613566465584030782718282595860479507437145978780661824021373427592661971676194678945425603481243152950803430223429770584589035540")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("17240450559761977980122412314161640060241343294093707395185248113383705716159438614427599247141189016754802420522656145949218463932844906063016377816468979626222511008166315152598760841414548603319918689262036487417209632891348");
    a2 = BigNum::from_str("1672071232045081861514966474812874062328236398041295678589005135599616488575369611498844494099614679370443064019006890657450179191715827695180174735307837");
    if((a1 % a2).to_str() != "207610983216586572995966691014014178715556064575918300058559398638440099122274903101382814099288086381525735793044255080283338992232928933730791393338286")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("20226915422496260215903934041458791268636749130088129574005756694829496870054357681105405650199140840665247794227356416736823599430771575954578612477079437841917268178439503331429994832991485438281532437908444610812166265");
    a2 = BigNum::from_str("8850124069756345728677007380418790217030801242384537939116196564927628443812730270507586331845297313641531920500147054125334354819703351916551639866113048");
    if((a1 % a2).to_str() != "593745886956758487329248680460505489815671206826665980621143496110601460118680237038148707825854865402037983184517284501807686308509240778953589493620473")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("18359990864193191019481158829547791484302615796397544609294334007964670360159594785313807113801973752377585264927175749930823781690709538812647280465842362635342690886");
    a2 = BigNum::from_str("7531506873781956416226371470690506789316869506741901625760845306407446371542281311431324123037824753445775884379311987705570099977680102088827029630752483");
    if((a1 % a2).to_str() != "831905975918843566229655602601995613792850560874133850185854475005229303634636106290010499222441590173629306796362100679235006342770390847782163137265245")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("204822609868940009872762832265391085075823176564582454120727230466741113247892942061491951782014211216485206205346562287818978090165056146239650142468891833016069495861276278384601877828905958751268969818909041595404937524336116");
    a2 = BigNum::from_str("9036053026674347601354449872267916985590663492225668433456224068886170404990685110250480729349636087531561147699336373400952700510304146790798041412326841");
    if((a1 % a2).to_str() != "4082494327852454848428828678399736086061737831857222349236714987230870673255154138926807683101883888234020931810454123961813076786786932374281028562016935")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("194158068705645881503363317758845560044215569795572536723285710405905424241817874532807235494491099432500288452339618860300654172483497733084303098533094780097588389460062000295399541471332415");
    a2 = BigNum::from_str("5219435774476825932489383106565572291577167361339599325705692288542331036892943089948231862389805511065284085475891255617941728617479773822436518616994332");
    if((a1 % a2).to_str() != "430329343542585100406402162140414481489198739860335626834092800132472386125730652843338766700170697110508115084632616840854525233453118013010278191076635")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("164297219863256037377624877034042821837694004663054765550707536884810901652110276784720481258682810531004839756710997121138508540006224585177186646967315642207148000133938760248");
    a2 = BigNum::from_str("5100504733939513589038237430383818974215687029868730715404374282323717148799573191705589697411242590611841163215556306397680444845255523721652069412317408");
    if((a1 % a2).to_str() != "3516185605730174426828306935393795879597427114460153826645015482781806319893631990176126585164604939473849026430365520562554546881803582813568412788578776")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("9229282583770637397076828809913002209153148249840654976155559342084811129811415653117785108643320593251197276698175372097496244854187540397201159105287388992096462137828058986017965342340308765021336502102895030895");
    a2 = BigNum::from_str("10675226384675902793009258204022929483781351589435418223642683489065112556989504360554932751692948125727547743988526729149657772252425276632514344784357198");
    if((a1 % a2).to_str() != "9943509053513768074829925534347645708177243025049247466026411829035770650103596486015783861371817424815750914407984781091616661609782575464628908460387729")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("223308798960976550673781533844176956353335012234968135135502905074519561917238843037576734039519757139155357174578674189370028685360721610510226499249440521010828989435759634652030943220619509729846");
    a2 = BigNum::from_str("2918952415480940841252858007528166893840502693801339551121728667456232651527072059290251739237701668360886540834814784560887162817538092400794841185219157");
    if((a1 % a2).to_str() != "1094596242024433385824181627203365441718792751967649025061846266344802576563193071523052366846998742200358558757867339524636667480563536717497062691239519")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("3811379619917134636654232336800339391214513167636697155947776607632782125752692027178964691660723588937971865688019342295793214757746315443407773383448492576144929956");
    a2 = BigNum::from_str("12695027248711835435635173551743770562315262642874836940049262736653110840681336344434527382756692641240612684506647495622402684822475108342001464159472696");
    if((a1 % a2).to_str() != "12085003801209559254061077502132556704957210125351738205002619031405164724457011618147141357643666187428021329012760747067264680839798128735402970213875132")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("26153956003028643298532189658478293919480179545321173257712579844880990032881102920799991826587330508960127426879951174480012599357609799213380127501226950044985757739912896046755446826795864139587736267272749464831726951623");
    a2 = BigNum::from_str("4944114029681370850469309100143528625273324767137803520699536325096597052181947546635770753504235188673127838322492885381416414864595524118544713799448525");
    if((a1 % a2).to_str() != "3549865135845519201676940415566544487615376128984153027737662791494354185389083622492246764535097456108102103995810130555658616034109891915469302811313398")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("135994760934242998666441503848327072328921782645171730153047301309985145223203581090693374331019737314792889228526394422087320132063036159344370920985563517183171734563864175516728398171030240985909580432021356545");
    a2 = BigNum::from_str("11588282924777394299065848848989060274618597411108845615959970000936070612438042586158411073640655636347468923311401751034283810295161635647715382279217004");
    if((a1 % a2).to_str() != "892490590201027999380419744477407419681026383527467088917939005368609116646837487010357372979356787483918697454934413575414764045856199236173794561516077")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("24238274762493812075964001856560970173025262598868090864232798420119471749357572469342978805377912056568295676489512714569259711676792564261679691070201580885123653431412699");
    a2 = BigNum::from_str("2256336811871963142825874962018156559601966872808528408944003834287405785802025780579076261346955195717626725440308232541876047755806162633344444195285036");
    if((a1 % a2).to_str() != "143481751885841723310505216888208679756266187672681321663594665792660645248712528013199234857752739354914866280809350641110116165895870367380758838305155")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("32866175273288553550379811150780846736646849586544535193441393363424092219995300579565576273400438039876939468205053884364715974493830710317461778729603550259079845704070218490353461853");
    a2 = BigNum::from_str("8039639416763813000286461511024812143324963421049363627186437138063758176069919499145532461011464625491824547574930376005325542039748991247027372032154370");
    if((a1 % a2).to_str() != "841945643662565776020228653150808477989841167452583088418443562357450064550999834780643744141002014095009741828382095204151845885821283854812330217387453")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("18384729438841523931938892044560671383939628423546315690267689605000733816426203931886565205135628718808885007207856032105237196189598563316700059513935300725049026776");
    a2 = BigNum::from_str("1680207476345302002732193530895962690408542760799443929403189967184161226439425129912809750618396779543810829224211872123622318848664371320749183239553918");
    if((a1 % a2).to_str() != "1198773862999681741308498101491921903849425626281339205812537603319112310512668905488027491470821396330982883127798551013804144157378381652885672387666722")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("37022139171730749861521962495785767415574096392884107437064512965938828423154294651327547794650095636561616941686418900495276473517080395717585385022761442542510250410899088728421241107295162216725976429213");
    a2 = BigNum::from_str("3554698708497450937082356937915967129019265183208830105045333814779963588923299932698930716800490835478917117772363285974080477990746210366343215713556466");
    if((a1 % a2).to_str() != "2719495401346684169726883344861149760794939432130883653695678432848007931118540438188796140458876157680018740681436645086214535591083252715176608103570077")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("25410536805565706692639209091910467961540466172170022675192781770459362758424470550408920693773334646164924400983956928091728994723897883057716749179666537970626614031766947250653604246635975086469416675230487478368465680438549629");
    a2 = BigNum::from_str("10784811474452976973823361615104279035329438385667923977647625021598844595544244387838324152632106464113939866300815621028483828742339575985123747407610587");
    if((a1 % a2).to_str() != "2637634512262345488739148547768983267359760639476563011546455313891500245504638385435501367008326430978603584822796853562098653034458255614982323619122495")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("80236573381572326710151127084434945856413700800655897328371278157967177954883821787166595617058367067491821349063596139176418675121575690535283793595966497882715243");
    a2 = BigNum::from_str("5670252707428701176156652338348872427684227313927684838485433175136259985510682283894168199229524951480720579407016980444729594627785242064018170340680862");
    if((a1 % a2).to_str() != "916416654956135952299580815192534664658418450389275889523880066608109565349211017588042574413771388941415036521135401538598409391639987255860511224110965")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("9163100192679437332037318015553612480971227562916656110480952904475292008275434923555020280964117843597912346709684578244538233246168976212093183987222306917677666817641193820883694270664570844233242446263747741852164798168");
    a2 = BigNum::from_str("3225190955953926054386084325331729867661035733241396544547569781940938243457980834835319501615940186858207688823074650853988870389641072700167613069184494");
    if((a1 % a2).to_str() != "1877718786105050206558161390482068485577547255020951494436683834957429640087090791279092596587712232090767723047673376042601091682796917855900994741555900")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("466015322990020098755141803910042621872865528426746037692262789669800057064342932483060750609210584569854058294605260551134662190825611845047362325049003810918448382812059972336344478524170748023722939330857147137567907215");
    a2 = BigNum::from_str("13200958575685814309449685611202519363470451989865911840794930337670779747074274651503600375737302693476922148171479412014726030507178015866555438974034682");
    if((a1 % a2).to_str() != "287807209928518584000513353708285006427234877743542169493365105647256565256020768650837699417105376738591928422304059211557912423063672793537250137698665")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("1592369297704092698233094075689508663154836713694968196600686939177525871192187885782668302115655338463935667253939127773467731100930476876163128987772822160231978358527154515759559124187761589256915961768656739451605");
    a2 = BigNum::from_str("3611732307427901820303736547139331477469663150121432365321886031014795066156037628011473756767822186903011961340800241442174363506784285179284516119931278");
    if((a1 % a2).to_str() != "1321208767918026149969203162196744543198290999375778880678922279018252141782942805827149032426877450465491576196690888956108565767556734925535200747427487")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("36848960303161927284955365565312181491922023645169256762841112793503999566739833679408018028958911238731525297926371147574350076231401102008200978748984865013");
    a2 = BigNum::from_str("3520863475044756685341935084497371285869371102916939610370595887969885207363924147491237721753065655316337264856364642700492843744572617837701455070941775");
    if((a1 % a2).to_str() != "3124036818548572852014906047190985299055053143483740312826825899150871676367475912215270813079155846055821204515161713692466444448656336655251431579189638")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("178369600977778571219698809889279712453714723858934329274048224621540865808467780418459765926868033463573336772587985551934673557421756356289089024298199754594780515279443");
    a2 = BigNum::from_str("8189143381658884293799166515759226341514821443569328841393158493990018943792366894802987972925556120366059219636857416473478892332244328068804288625426944");
    if((a1 % a2).to_str() != "4654440440379492216580794409684789688973888259230072018034053978873977428442675563353908191306479314139218547170247958941656308586137848028204204243768915")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("694392681885198532723223273406777075886134138118806731335140680600938311456855758138798077026072334731800852437042799258142992554647710020729603392088171672237540635331889996032071805489271466700740428481956316925957278");
    a2 = BigNum::from_str("9129495936045134021255718995179382544287538831784225078502905461183442935317012079339702260676752508372906871725339890686843587210451730196854516956150463");
    if((a1 % a2).to_str() != "8005843601853986941394317359711778314213719392366094112951157086293516316054094117652103888681489883279997401784476519347364132467276381566945552936233026")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("69946911183312757193383256280539350974820424591649923286013675810401041419812248534352913100911150291252330772676141929097692161332159442337200301747585071495577030874717982294396678");
    a2 = BigNum::from_str("5623714419368530260234926848881210564077062744729029546922075099786448216070640222741762267966389112074301461122662234306531458430490096027113643448944986");
    if((a1 % a2).to_str() != "295072126205596754420449712530925441874559724567791694546442206313604840333456241207542587836695586756184983854896973465711238631394421079086705897992556")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("109726661483494810162557191693597237246197278423144280641461306938260866857718740371066238381602316869424722906614547515979020796605885350097567968968800230626380595457487874960375074568493992560584648385133620172466");
    a2 = BigNum::from_str("9543785381288075317614712608043814970597851875419432247106759851558435482460174018376695649122067576693263941789325154602662294254902176817902773841065149");
    if((a1 % a2).to_str() != "5989666661840312541166434487593070638179223535395876290878332868738044973583403683595195169825829255382667043894984813154392586232129206456885344891309495")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("692701594656600506649629201640239871122723814641905128120717176808800747196241046273030206520205475077566244268044013839278290562364253519595716519769398732004674868");
    a2 = BigNum::from_str("888720118545753420771430010559730407381255426583711054905227226666714672711401768789162111109490165363593184536415039497198139115809224839452356009616393");
    if((a1 % a2).to_str() != "547974594462359430016401882148099708596993958526585004728567281825903743109073229413405404879175055941099195265437039126517853152326288432635710641639529")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("66787137436323669144831341175600744615507470843593547635928025627802440471344934517065978910467462605667234729147115983340416071562540930366490496219954164892596434305802901620642008632800602946");
    a2 = BigNum::from_str("11257482138034512229182071353153416578030944555205394874579734187498007091671834230925937496237036549361952692894344341144765904918076343098055960596713564");
    if((a1 % a2).to_str() != "5365968935449348450422880576556250903049711762510199482344347780520766333228543250688270459840489441537170389214551735558191803130118048182039020454679442")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("1195579301579018169957455998797672686466337759354287083900447639150511885546127292137518896028722322413776854535141594478759686156180609800371745507970534783302375735986752906600991419993690627698283880057077627672");
    a2 = BigNum::from_str("11672162320861396114721321828512529761025889364821649926948788392273873389513258846921652464935061447609296008937527259760231864215417988337341562615784538");
    if((a1 % a2).to_str() != "3295521834148627054783842587911671184071097323603903554053389094555405339774664502766976066290349456295792331179492514194200829719349269083479646386211024")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("706788672009309006344507934776357663316203803561089166407648045899708109826263004549234600374497545604829810391545210030116556506103587356631098675438920356530801726992762798189640671180668996134987");
    a2 = BigNum::from_str("8176902152521588605717028892282162896025841678872175580907256639094219935114147754935613660486960815775047243472998939642077988425429985767808937031737800");
    if((a1 % a2).to_str() != "6657189705605686381973169162820197205992639928337399735360736731306043926867438542965141083976078833719146550816523308193506970132106186177455708284165987")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("25951607504751572533060139888124149114228085597990475378486669667083858802309952089394340895972257890116923901265654515312105334750947785209107116898754036884486812");
    a2 = BigNum::from_str("9131636092222264254517794751394458883279969771876154978559034088072389338414088120009205947088942090225119105221149226597903572020135669500263085859682034");
    if((a1 % a2).to_str() != "7167514115143622701443602668762827437775775205450335449893108636240283780831130580709398149867866146678411997412923174157797608031724619356312322207084948")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

    a1 = BigNum::from_str("1950382319270403094570088797632904627048041709234533650838265337464331548612797486169024757661900191749978918167491066103366329289342139929176886596442309077722056814212311804128635061391447935427");
    a2 = BigNum::from_str("3499711314125620940053578253531745321242768402601690527341678584405852006372345522614997911571251799308327530897243830360522620184925295530585379817561606");
    if((a1 % a2).to_str() != "3144728833194737539144232948283276265376762896763124067609423896025753177482298311754643769493175831423663034480750003532338912078171308479995260485750479")
    {
        std::printf("line=%d\n", __LINE__);
        throw std::runtime_error("err in common::bn_div");
    }

}
